sql整理笔记
-
select语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)
语法:
select 列表名 from 表名称
select * from 表名称 -
select distinct语句列出不同的distinct的值,用于返回唯一不同的值
SELECT DISTINCT 列名称 FROM 表名称 -
wehere 子句添加到select语句
SELECT 列名称 FROM 表名称 WHERE 列 运算符值 -
AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
使用 AND 来显示所有姓为 “Carter” 并且名为 “Thomas” 的人:
SELECT * FROM Persons WHERE FirstName=‘Thomas’ AND LastName=‘Carter’
使用 OR 来显示所有姓为 “Carter” 或者名为 “Thomas” 的人:
SELECT * FROM Persons WHERE firstname=‘Thomas’ OR lastname=‘Carter’
也可以把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):
SELECT * FROM Persons WHERE (FirstName=‘Thomas’ OR FirstName=‘William’)
AND LastName=‘Carter’ -
order by 语句用于对结果集进行排序
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果按照降序对记录进行排序,可以使用 DESC 关键字。
以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
-
insert into语句 用于想表格中插入新的行
INSERT INTO 表名称 VALUES (值1, 值2,…)
INSERT INTO Persons VALUES (‘Gates’, ‘Bill’, ‘Xuanwumen 10’, ‘Beijing’)
指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,…)
INSERT INTO Persons (LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’) -
update语句 用于修改表中的数据
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 -
delete语句 用于删除表中的行
DELETE FROM 表名称 WHERE 列名称 = 值
删除所有行:
可以在不删除表的情况下删除所有的行
DELETE FROM table_name 或者 DELETE * FROM table_name -
top子句
TOP 子句用于规定要返回的记录的数目。
对于拥有数千条记录的大型表来说,TOP 子句是非常有用的。
注释:并非所有的数据库系统都支持 TOP 子句。
sql server语法:
SELECT TOP number|percent column_name(s) FROM table_name
mysql语法:
SELECT column_name(s) FROM table_name LIMIT number
例如:查询前两条数据:
select top 2 * from Persons -
like操作符 用于在where子句中搜索列中的指定模式
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
通过not 关键字,可以从表中选取不包含not like里面的数据 -
通配符
LIKE ‘[!ALN]%’ 选取不以ALN开头的
LIKE ‘[ALN]%’ 选取以ALN开头的 -
in操作符允许我们在where子句中规定多个值
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,…)
表中选取姓氏为 Adams 和 Carter 的人:
SELECT * FROM Persons WHERE LastName IN (‘Adams’,‘Carter’) -
between…and 会选取介于两个值之间的数据范围(值可以是数值,文本或者日期)
如需以字母顺序显示介于 “Adams”(包括)和 “Carter”(不包括)之间的人,请使用下面的 SQL:
SELECT * FROM Persons WHERE LastName BETWEEN ‘Adams’ AND ‘Carter’
如需使用上面的例子显示范围之外的人,请使用 NOT 操作符:
SELECT * FROM Persons WHERE LastName NOT BETWEEN ‘Adams’ AND ‘Carter’ -
alias语法 为列名称和表名称指定别名
表的语法: SELECT column_name(s) FROM table_name AS alias_name
使用别名的语法:
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName=‘Adams’ AND p.FirstName=‘John’
不适用别名的语法:
SELECT Product_Orders.OrderID, Persons.LastName, Persons.FirstName
FROM Persons, Product_Orders
WHERE Persons.LastName=‘Adams’ AND Persons.FirstName=‘John’
列的语法: SELECT column_name AS alias_name FROM table_name
使用列表别名的用法:
SELECT LastName AS Family, FirstName AS Name FROM Persons
-
join用于根据两个或者多个表中的列之间的关系,从这些表中查询数据
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
使用join
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName -
left join
A表 学号 姓名
B表 学号 成绩
A表有 学号1 张三 学号2 李四 学号3 王五
B表有 学号1 50分 学号3 60分
select A.姓名,B.成绩 from A left join B on A.学号=B.学号
结果就是
张三 50分
李四 (空)
王五 60分
总结:
A inner join B 取交集。
A left join B 取 A 全部,B 没有对应的值为 null。
A right join B 取 B 全部 A 没有对应的值为 null。
A full outer join B 取并集,彼此没有对应的值为 null。
对应条件在 on 后面填写。
count (表达式)–分组里非空记录数
count (表达式)–分组里非空记录数
count(*)–所有记录
count(1)–所有记录
count(case job = ‘CLERK’ then 2 end )–CLERK 人数
count(comm)–有奖金的人数
count(distinct job)–distinct(去重),共有多少种工作