一、什么是 SQL?
SQL 指结构化查询语言
SQL 使我们有能力访问数据库
SQL 是一种 ANSI(美国国家标准化组织) 的标准计算机语言
二、SELECT 语法
Persons表
Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
4 Carter William Xuanwumen Beijing
单表查询查询
SELECT LastName,FirstName FROM Persons
结果
LastName FirstName
Adams John
Bush George
Carter Thomas
三、DISTINCT 语句
Orders表:
Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953
语法:
SELECT DISTINCT Company FROM Orders
结果
Company
IBM
W3School
Apple
四、WHERE 子句
WHERE 子句的运算符
操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
查询上面Persons 表,查询所在Beijing的人
SELECT * FROM Persons WHERE City='Beijing'
Id LastName FirstName Address City
3 Carter Thomas Changan Street Beijing
4 Carter William Xuanwumen Beijing
五、AND 和 OR 运算符
AND语法:
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
结果
Id LastName FirstName Address City
3 Carter Thomas Changan Street Beijing
OR语法:
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
结果
Id LastName FirstName Address City
3 Carter Thomas Changan Street Beijing
4 Carter William Xuanwumen Beijing
结合 AND 和 OR 运算符语法
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter
结果
LastName FirstName Address City
Carter Thomas Changan Street Beijing
Carter William Xuanwumen Beijing
六、ORDER BY 语句
SELECT Company, OrderNumber FROM Orders ORDER BY Company ASC
结果:
Company OrderNumber
Apple 4698
IBM 3532
W3School 6953
W3School 2356
跟多个参数
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber ASC
结果:
Company OrderNumber
Apple 4698
IBM 3532
W3School 2356
W3School 6953
属性ASC和DESC 默认ASC正序,DESC逆序
七、INSERT INTO 语句
插入新的行
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen', 'Beijing')
在指定的列中插入数据
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
八、Update 语句
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
会将LastName = 'Wilson'的列的FirstName 改为'Fred'
九、DELETE 语句
删除某行
DELETE FROM Person WHERE LastName = 'Wilson'
删除所有行
DELETE FROM Person
十、TOP 子句 返回规定的数目
MySQL 语法:
SELECT * FROM PersonsLIMIT 5
返回5条结果集
Oracle 语法
SELECT * FROM Persons WHERE ROWNUM <= 5
返回5条结果集
十一、LIKE 操作符
使用方法 LIKE 'N%' OR LIKE '%N' OR LIKE '%N%'
SELECT * FROM Persons WHERE City LIKE 'N%'
结果
LastName FirstName Address City
2 Bush George Fifth Avenue New York
十二、通配符
通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
结果
LastName FirstName Address City
2 Bush George Fifth Avenue New York
十三、IN 语法
SELECT * FROM Persons WHERE LastName IN ('Adams','Bush')
结果:
Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
十四、BETWEEN 操作符
SELECT * FROM Persons WHERE ID BETWEEN 1 AND 2
结果:
Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
十五、多表联查
用户表 USERS
ID NAME AGE
1 张三 20
2 李四 18
3 王五 16
商品表 COMMODIT
ID NAME JIAGE
1 方便面 5
2 火腿 3
3 饮料 4
订单表 ORDERS
ID USERID COMMODITID
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 3
查询下单的用户
SELECT DISTINCT USERS.NAME FROM ORDERS AS DD LEFT JOIN USERS ON USERS.ID = DD.USER_ID
结果:
NAME
王五
李四
张三
查询下单的用户所买的商品
SELECT USERS.NAME,COMMODIT.NAME FROM ORDERS AS DD LEFT JOIN USERS ON USERS.ID = DD.USER_ID LEFT JOIN COMMODITON DD.SP_ID = COMMODIT.ID ORDER BY USERS.ID
NAME COMMODITONNAME
张三 火腿
张三 方便面
张三 饮料
李四 方便面
李四 火腿
王五 饮料
多表连接关键字 INNER JOIN / LEFT JOIN / RIGHT JOIN / FULL JOIN 区别
INNER JOIN
只显示两表匹配的数据
LEFT JOIN
从左表那里返回所有的行,即使在右表中没有匹配的行
RIGHT JOIN
从右表那里返回所有的行,即使在左表中没有匹配的行
FULL JOIN
返回两表所有数据
十六、UNION 和 UNION ALL 操作符
UNION 语法
注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
十七、常用函数
AVG 函数
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
COUNT() 函数
COUNT() 函数返回匹配指定条件的行数。
MAX() 函数
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
MIN() 函数
MIN 函数返回一列中的最小值。NULL 值不包括在计算中。
SUM() 函数
SUM 函数返回数值列的总数(总额)。
十八、GROUP BY 语句
OEDERS表
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
结果:
Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000
十九、HAVING 子句
利用上面
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<1700
结果:
Customer SUM(OrderPrice)
Bush 2000
Adams 2000