一、增删改查。
1.增
语法:INSERT INTO
基本语法: INSERT INTO table_name(colume_names) VALUES (data_values)
例子:
INSERT INTO Category (Category ID , Category)VALUES (1,‘Thriller’)
CategoryId |
Category |
1 |
Thriller |
2.删
语法:DELETE(WHERE子句指定要删除的记录)
基本语法:DELETE FROM MemberDetails
例子:
DELETE FROM MemberDetails WHERE MemberId=3
(在Memberdatails中删除所由MemberId=3的记录)
3.改
语法:UPDATE(WHERE 子句指明要更改哪些记录)
基本语法:UPDATE table_name SET column_name=value WHERE condition
例子:
UPDATE MenberDetails
SET
Street=’45 Upper Road’,
City=’New Town’,
State=’New State’
ZipCode=’99112’
WHERE MemberId=4
MemberId |
First name |
Last Name |
Dateof Birth |
Street |
City |
State |
ZipCode |
|
Dateof Joining |
4 |
Steve |
Gee |
Oct15,1967 |
45 Upper road |
New Town |
New State |
99112 |
Steve@ gee. com |
Feb 22 2004 |
4.查
语句:SELECT
(1)基本语法:SELECT column1, column2,……column FROM table_name
例子:SELECT MemberID,FirstName FROM MemberDetails;
(选择所有记录的MemberId和Firstname列)
(2)返回不同的行(DISTINCT 关键字)
SELECT DISTINCT column FROM table_name
(3)使用别名
SELECT Last Name AS Surname FROM MemberDetails(Surname取代Lastname)
(4)查询空行
SELECT Name FROM a where Email is null
(查询A表中Email为空的所有行,并显示Name列;SQL 语句中is null或者is not null来判断是否为空行)
(5)查询排序(ORDER BY(默认升序) ,ASC(升序) ,DESC(降序))
基本语法:SELDECT YearReleased FROM Films ORDER BY YearReleased;(按时间从早期到后期)
LIKE通配符查询:
①基本语句:(NOT LIKE )
SELECT LastName FROM Memberdetails
WhERE LastName (NOT) LIKE ‘J%’(匹配所有(不)以“J”为开头的名字)
(% 匹配一个或多个字符。MS Access使用的是(*)通配符,取代(%)通配符)
(_ 匹配一个字符,MS Access 使用(?)通配符,取代下划线通配符)
使用IN运算符
①基本语句:
SELECT FileName ,YearReleased,Rating
FROM Films
WHERE
YearReleased IN(1967)
AND
Rating IN (4,5)[在Film数据库中,看那些电影的发行时间为1967,并且级别为4或5]
使用BETWEEN运算符
①基本语句:
SELECT FilitiName ,Rating
FROM Films
WHERE Rating BETWEEN 3 AND 5
(选择级别位于3至5之间的电影)
子查询(确保结果被正确过滤):分为内部子查询和外部子查询
(1)再论IN运算符(子查询中)
·基本语句:SELECT FirstName,LastNamw.YEAR(DateOfBirth)
FROM MemberDertails
WHERE YEAR (DateOfBirth) IN (SELECT YearReleased FROM Films);
子查询(SELECT YearReleased FROM Films)返回Films表中关于发行年份的一个列表,如果一个成员的出生年份匹配该列表中的某一项,则WHERE子句为真,且包含在最终结果。
或者运行语句:
SELECT FirstName,LastNamw.YEAR(DateOfBirth)
FROM MemberDertails JOIN Films ON YEAR(DateOfBirth)=YearReleased
GROUP BY FirstName,LastName,Year(DateIfBirth)
(2)使用ANY、SOME(前两者一致)和ALL运算符
①为了使ANY返回True,则所比较的值需要匹配子查询所返回的值。
SELECT FirstName,LastName,YEAT(DateOfBirth)
FROM MemberDetails
WHERE YEAR(DateOfBirth)=ANY(SELECT YearReleased FROM Films)
注:WHERE子句指定YEAR(DateOfBirth)=子查询(SELECT YearReleased FROM Films)所返回的某一个值。
②ALL运算符:
(3)HAVING子句中使用子查询
当使用了GROUP BY子句时,HAVING子句用于过滤显示在结果集中的分组。
例如:
SELECT City
FROM MemberDetails
GROUP BY City
HAVING AVG(YEAR(DateOfBirth))>1990
(为了获得城市中的成员的平均出生年份打于1990年所有城市的列表)
(4)EXISTS运算符(检查记录行,但不比较列)
可以使用NOT运算符来颠倒EXISTS的逻辑,已查看子查询是否不返回结果。
(5)在INSERT,DELETE FROM 和UPDATE中使用子查询
(用于被改变或者被删除的内容,或者用于提供被插入或者被改变的数据)
二、联合
1.内部联合:由INNER JOIN 关键字组成,指定了两个需要联合的表。在INNER JOIN之后指定了一个ON子句,该子句指明了一些条件,每个表的记录行必须满足这些条件。
例如:SELECT MeetingDate,FirstName, LastName
FROM Attendance INNER JOIN MemberDetails
ON Attendance . MemberID=MemberDetails.MemberId;
(INNER JOIN连接了Attendance 和 MemberDetails表)
(1)等值联合和不等值联合
前者ON子句条件包含一个(=)运算符号
后者联合的子句中包含不相等的计算
(2)多个联合(两个及以上INNER JOIN语句连接)和多个条件(多个ON子句)
(3)交叉联合(不存在联合表的ON子句,是最基本的联合)
基本语句:SELECT Category,street
FROM Category CROSS JOIN Location
ORSER BY Street;
(Category和Location表被交叉联合)
(4)自联合
2.外部联合
(1)左外部联合:无论是否成功匹配ON子句,都返回联合右边表中存在的一个匹配记录
SELECT Location.Street,MemberDetails.Street
FROM Location LEFT OUTER JOIN MemberSetails
ON Location.Street=MemberDetails.Street
Location.Street |
MemberDatails.Street |
Main.Street |
NULL |
Winding.Road |
Winding Road |
Tiny.Terrace |
NULL |
(2)右外部联合(不管是否成功匹配ON子句,都返回联合左边表中的所有记录)
(3)完全外部联合(少用)(FULL OUTER JOIN)(左右联合的组合)
SELECT Location.Street,MemberDetails,Street
FROM Location FULL OUTER JOIN Membertails
ON Location.Street=MemberDetails.Street/
(4)利用UNION运算符组合结果集【通过UNION运算符将两个或多个SELECT查询的结果联合到一个结果集中】
{两个基本规则:一是每个查询必须产生相同数目的列。二是列的数据类型必须相同,或者至少数据库系统必须能够将他们转换为相同的数据类型}
三、高级查询
技巧:
1.当使用AND时,将很可能不为真的条件放在前面
2.但是用OR运算符时,将最可能为真的条件放在前面
3.DISTINCT比GROUP BY更快
4.限制联合的结果
5.对子查询使用IN运算符
6.避免使用SELECT*FROM
7.对整数类型列进行搜索