⼀、SQL语句总结(查询语句)
1 SQL语句的分类
本⽂总结⾃《SQL必知必会》、《SQL基础教程》
SQL命令⼀般分为DQL、DML、DDL⼏类。
DQL:数据查询语句,基本就是SELECT查询命令,⽤于数据查询。
DML:Data Manipulation Language的简称,即数据操纵语⾔,主要⽤于插⼊、更新、删除数据,所以也分为INSERT、UPDATE、DELETE三种语句。
DDL:Data Definition Language的简称,即数据定义语⾔,主要⽤于创建、删除,以及修改表、索引等数据库对象语⾔。
2 检索数据
2.1 SELECT语句
使⽤SELECT检索表数据,⾄少要给出两组信息
1. 想选择什么
2. 从什么地⽅
2.2 检索单个列
--输⼊
SELECT prod_name
FROM products;
--结果
prod_name
---------------------
8 inch teddy bear
12 inch teddy bear
18 inch teddy bear
Fish bean bag toy
Bird bean bag toy
Rabbit bean bag toy
Raggedy Ann
King doll
Queen doll
上述语句利⽤SELECT语句从products表中检索⼀个名为prod_name的列。SELECT指出需要检索的列, FROM指出从哪个表中检。
该SELECT语句包含了SELECT和FROM两个⼦句。⼦句是SQL语句的组成要素。本例中两个⾃句就是以SELECT或者FROM等作为起始的短语。
2.3 检索多个列
在SELECT后给出多个列名,列名之间以逗号分隔
SELECT prod_id, prod_name, prod_price
FROM products;
--结果
prod_id |      prod_name      | prod_price
---------+---------------------+------------
BR01    |8 inch teddy bear  |  5.99
BR02    |12 inch teddy bear  |8.99
BR03    |18 inch teddy bear  |11.99
BNBG01  | Fish bean bag toy  |  3.49
BNBG02  | Bird bean bag toy  |  3.49
BNBG03  | Rabbit bean bag toy |  3.49
RGAN01  | Raggedy Ann        |  4.99
RYL01  | King doll          |9.49
RYL02  | Queen doll          |9.49
2.4 检索所有列
在列名位置使⽤通配符 星号(*)。但是使⽤星号,就⽆法设定列的显⽰顺序,会按CREATE TABLE语句的定义对列进⾏排序。
--输⼊
SELECT*
FROM products;
--结果
prod_id | vend_id |      prod_name      | prod_price |                              prod_desc
---------+---------+---------------------+------------+-----------------------------------------------------------------------
BR01    | BRS01  |8 inch teddy bear  |  5.99|8 inch teddy bear, comes with cap and jacket
BR02    | BRS01  |12 inch teddy bear  |8.99|12 inch teddy bear, comes with cap and jacket
BR03    | BRS01  |18 inch teddy bear  |11.99|18 inch teddy bear, comes with cap and jacket
BNBG01  | DLL01  | Fish bean bag toy  |  3.49| Fish bean bag toy, complete with bean bag worms with which to feed it
BNBG02  | DLL01  | Bird bean bag toy  |  3.49| Bird bean bag toy, eggs are not included
BNBG03  | DLL01  | Rabbit bean bag toy |  3.49| Rabbit bean bag toy, comes with bean bag carrots
RGAN01  | DLL01  | Raggedy Ann        |  4.99|18 inch Raggedy Ann doll
RYL01  | FNG01  | King doll          |9.49|12 inch king doll with royal garments and crown
RYL02  | FNG01  | Queen doll          |9.49|12 inch queen doll with royal garments and crown
注意:除⾮确实需要表中的每⼀列,否则最好不要使⽤*****通配符。虽然使⽤通配符可以带来使⽤上的便利,但是检索不需要的列通常会降低检索和应⽤程序的程序。
2.5 检索不同的值
SELECT语句返回所有匹配的⾏,若不想有重复出现的值,可以使⽤DISTINCT关键字,它指⽰数据库返回不同的值。
SELECT vend_id
FROM products;
--结果
vend_id
---------
BRS01
BRS01
BRS01
DLL01
DLL01
DLL01
DLL01
FNG01
FNG01
--输⼊
SELECT DISTINCT vend_id
FROM products;
--结果
vend_id
---------
BRS01
FNG01
DLL01
注意:不能部分使⽤DISTINCT
DISTINCT作⽤于所有的列,不仅仅是跟在其后的那⼀列。DISTINCT关键字只能⽤在第⼀个列名之前。
--输⼊
SELECT DISTINCT vend_id, prod_price
FROM products;
--结果
vend_id | prod_price
---------+------------
BRS01  |11.99
BRS01  |  5.99
BRS01  |8.99
FNG01  |9.49
DLL01  |  3.49
DLL01  |  4.99
当指定的所有列相同,才算相同;其中某⼀类相同,不算相同。
2.6 限制结果
SELECT语句返回指定表中所有匹配⾏。如果只想返回其中第⼀⾏或者⼀定数量的⾏,各种数据库的这⼀SQL实现并不相同。PostgreSQL中使⽤LIMIT关键字指定返回⾏数。
--输⼊
SELECT prod_name
FROM products
LIMIT 5;
--输出
prod_name
--------------------
8 inch teddy bear
12 inch teddy bear
18 inch teddy bear
Fish bean bag toy
Bird bean bag toy
LIMIT 5指⽰返回结果不超过5⾏。为了获取后⾯的数据,需要OFFSET关键字指定从哪⾥开始以及检索的⾏数。
--输⼊
SELECT prod_name
FROM products
LIMIT5OFFSET5;
--输出
prod_name
---------------------
Rabbit bean bag toy
Raggedy Ann
King doll
Queen doll
LIMIT 5 OFFSET 5指⽰从第5⾏起的最多5⾏数据。第⼀个数字是检索的⾏数,第⼆个数字是指从哪⼉开始。
2.7 使⽤注释
-- 这是⼀种⾏内注释
# 这是另⼀种⾏内注释
/*
这种多⾏注释
*/
3 排序检索数据
3.1 排序数据
检索出的数据并不是随机显⽰的,数据⼀般以它在底层表中出现的顺序显⽰。有可能是数据添加顺序,但是如果数据随后进⾏更新或删除,那么这个顺序会受DBMS重新回收存储空间⽅式的影响。关系型数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序是有意义的。
为了明确地排序SELECT语句检索出的数据,可以使⽤ORDER BY⼦句。
--输⼊
SELECT prod_name
FROM products
ORDER BY prod_name;
--结果
prod_name
---------------------
12 inch teddy bear
18 inch teddy bear
8 inch teddy bear
Bird bean bag toy
Fish bean bag toy
King doll
Queen doll
Rabbit bean bag toy
Raggedy Ann
上述语句指出了对查询结果以prod_name列以字母序进⾏排序。
指定⼀条ORDER BY⼦句时,应该保证它是SELECT语句中的最后⼀条⼦句。
ORDER BY⼦句中使⽤的列是为了显⽰⽽选择的列,但实际上⽤⾮检索的列排序数据也是可以的。
--输⼊
SELECT prod_name
FROM products
ORDER BY vend_id;
--输出
prod_name
---------------------
8 inch teddy bear
12 inch teddy bear
18 inch teddy bear
Fish bean bag toy
Bird bean bag toy
Rabbit bean bag toy常用的sql查询语句有哪些
Raggedy Ann
King doll
Queen doll
3.2 按多个列排序
有时需要按不⽌⼀个列进⾏排序。例如,显⽰雇员名单,可能希望先按姓,再按名排序。
要按多个列排序,简单指定列名,列名之间⽤逗号分开即可。
--输⼊
SELECT prod_id, prod_price,prod_name
FROM products
ORDER BY prod_price, prod_name;
--结果
prod_id | prod_price |      prod_name
---------+------------+---------------------
BNBG02  |  3.49| Bird bean bag toy
BNBG01  |  3.49| Fish bean bag toy
BNBG03  |  3.49| Rabbit bean bag toy
RGAN01  |  4.99| Raggedy Ann
BR01    |  5.99|8 inch teddy bear
BR02    |8.99|12 inch teddy bear
RYL01  |9.49| King doll
RYL02  |9.49| Queen doll
BR03    |11.99|18 inch teddy bear
排序的优先级是ORDER BY后列顺序。上述例⼦中仅在多个⾏具有相同的prod_price值时,才会对产品按prod_name进⾏排序。所有prod_price列中所有值都是唯⼀的,则不会按prod_name进⾏排序。
3.3 按列位置进⾏排序
除了能⽤列名指出排序顺序外,ORDER BY还⽀持按相对列未知进⾏排序。
--输⼊
SELECT prod_id, prod_price, prod_name
FROM products
ORDER BY 2, 3;
--结果
prod_id | prod_price |      prod_name
---------+------------+---------------------
BNBG02  |      3.49 | Bird bean bag toy
BNBG01  |      3.49 | Fish bean bag toy
BNBG03  |      3.49 | Rabbit bean bag toy
RGAN01  |      4.99 | Raggedy Ann
BR01    |      5.99 | 8 inch teddy bear
BR02    |      8.99 | 12 inch teddy bear
RYL01  |      9.49 | King doll
RYL02  |      9.49 | Queen doll
BR03    |      11.99 | 18 inch teddy bear

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。