1、基础语句查询:
SELECT 列名称 FROM 表名称
SELECT * FROM 表名称
2、sql去重问题:
在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。
关键词 DISTINCT 用于返回唯一不同的值。
SELECT DISTINCT 列名称 FROM 表名称
3、条件查询:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
运算符
4、and 或者 or
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
5、对结果排序
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
SELECT Company, OrderNumber FROM Orders ORDER BY Company
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 //公司降序 //数字序号顺序
6、top句子
SELECT TOP 2 * FROM Persons //从上面的 "Persons" 表中选取头两条记录
SELECT TOP 50 PERCENT * FROM Persons //从上面的 "Persons" 表中选取 50% 的记录
7、like语句
SELECT * FROM Persons WHERE City LIKE '%g' //从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人
SELECT * FROM Persons WHERE City LIKE 'N%' //从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的人
SELECT * FROM Persons WHERE City LIKE '%lon%' //从 "Persons" 表中选取居住在包含 "lon" 的城市里的人
SELECT * FROM Persons WHERE City NOT LIKE '%lon%' //从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人
8、通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
(1)%:替代一个或者多个字符
SELECT * FROM Persons WHERE City LIKE 'Ne%' //从上面的 "Persons" 表中选取居住在以 "Ne" 开始的城市里的人
SELECT * FROM Persons WHERE City LIKE '%lond%' //从 "Persons" 表中选取居住在包含 "lond" 的城市里的人
(2)_通配符:仅替代一个字符
SELECT * FROM Persons WHERE FirstName LIKE '_eorge' //从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er' //从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er"
(3) [charlist] 通配符
SELECT * FROM Persons WHERE City LIKE '[ALN]%' //从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE City LIKE '[!ALN]%' //从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人
9、IN操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
例子:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter') //从上表中选取姓氏为 Adams 和 Carter 的人
10、between 操作符
(1)操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
(2)以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'
注意:
不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。所以,请检查你的数据库是如何处理 BETWEEN....AND 操作符的!
(3)使用上面的例子显示范围之外的人,请使用 NOT 操作符
SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter'
11、可以为列名称和表名称指定别名(Alias)
(1)表的sql as 语法
SELECT column_name(s)
FROM table_name
AS alias_name
(2)列的sql as语法
SELECT column_name AS alias_name
FROM table_name
实例1:假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。
现在,我们希望列出 "John Adams" 的所有定单。
我们可以使用下面的 SELECT 语句:
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'
实列2:使用一个列名别名
SELECT LastName AS Family, FirstName AS Name
FROM Persons
12、 JOIN关联(SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。)
(1)利用条件解决关联
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
(2)下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。
- JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
(3)内联接:inner join orders(MySQL INNER JOIN子句将一个表中的行与其他表中的行进行匹配) 注意:join与inner join是相同的没有区别
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons //主表
INNER JOIN Orders //次表
ON Persons.Id_P = Orders.Id_P //条件
ORDER BY Persons.LastName //排序
1)必须指定出现在FROM子句中的主表。
2)您需要指定要与主表联接的表,该主表出现在INNER JOIN子句中。理论上,您可以连接具有多个表的表。但是,为了更好的查询性能,您应该限制要加入的表的数量。
3)您需要指定连接条件或连接谓词。连接条件的关键字ON在INNER JOIN语句之后。连接条件是用于在主表和其他表之间匹配行的条件。
(4)LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。
(5)列出所有的人,以及他们的定购 - 如果有的话
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
特点:LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行
(6)RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。
(7)列出所有的定单,以及定购它们的人 - 如果有的话
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
特点:RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。
(8)full join 全连接(只要其中某个表存在匹配,FULL JOIN 关键字就会返回行)
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。
(9)希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
特点:FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。
(10)union和union all 操作符(UNION 操作符用于合并两个或多个 SELECT 语句的结果集)
实例:中国和美国的所有的雇员
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
13、select into 语句 (SQL SELECT INTO 语句可用于创建表的备份复件)
使用:
- SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
- SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
(1)select into 语法
1)把所有的列插入新表:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
2)只把希望的列插入新表:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
(2)SELECT INTO 实例 - 制作备份复件
1)制作 "Persons" 表的备份复件
SELECT *
INTO Persons_backup
FROM Persons
2)IN 子句可用于向另一个数据库中拷贝表:(疑问)
SELECT *
INTO Persons IN 'Backup.mdb'
FROM Persons
3)拷贝某些域,可以在 SELECT 语句后列出这些域
SELECT LastName,FirstName
INTO Persons_backup
FROM Persons
(3)SELECT INTO 实例 - 带有 WHERE 子句
1)从 "Persons" 表中提取居住在 "Beijing" 的人的信息,创建了一个带有两个列的名为 "Persons_backup" 的表
SELECT LastName,Firstname
INTO Persons_backup
FROM Persons
WHERE City='Beijing'
(4)SELECT INTO 实例 - 被连接的表
1)创建一个名为 "Persons_Order_Backup" 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P