sql语句查询——基础篇(1)

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

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值