1、SELECT语句:使用SELECT检索数据,必须至少给出两条信息-想选择什么,以及从什么地方选择。
注:关键字(keyword):作为SQL组成部分的保留字,关键字不能用作表或者列的名字。
输入:
------------------
SELECT prod_name FROM Products;
输出:
prod_name
----------------------
Fish bean bag toy
Bird bean bag toy
Rabbit bean bag toy
8 inch teddy bear
12 inch teddy bear
18 inch teddy bear
Raggedy Ann
King doll
Queen doll
注:样表数据使用的是SQL必知必会的数据
2、SQL语法
SQL语句以(;)结尾,不是必须但最好这样做。
SQL语句不区分大小写,但一般对SQL关键字大写,对列名和表名小写(有些特殊的DBMS系统会区分),这样写容易区分和调试。
SQL语句空格会被忽略,以下三种写法等价,但将SQL语句分成多行更容易阅读和调试。
写法1: SELECT prod_name FROM Products; 写法2: SELECT prod_name FROM Products; 写法3: SELECT prod_name FROM Products;
3、同时检索多个列
从同一个表中同时检索多个列,使用SELECT 加多个关键字,每个关键字用逗号分开。
输入: ------------------------ select prod_name, prod_id, prod_price from products; 输出:
-------------------------------------------------- pro_name prod_id prod_price Fish bean bag toy BNBG01 3.49 Bird bean bag toy BNBG02 3.49 Rabbit bean bag toy BNBG03 3.49 8 inch teddy bear BR01 5.99 12 inch teddy bear BR02 8.99 18 inch teddy bear BR03 11.99 Raggedy Ann RGAN01 4.99 King doll RYL01 9.49 Queen doll RYL02 9.49
3、检索所有列
SELECT * :星号(*)是通配符(一般最好别用,降低检索和应用户程序的性能)
输入 ------------------ select * from products; 输出 --------------------- prod_id vend_id prod_name prod_price prod_desc 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 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 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
4、检索不同的值
检索products表中的所有产品供应商的ID
select vend_id from products; 输出 --------------- DLL01 DLL01 DLL01 BRS01 BRS01 BRS01 DLL01 FNG01 FNG01
分析:输出有9行,但只有三个不同的值,使用DISTINCT关键字检索不同的值,且必须直接放在列名前面。DISTINCT作用于后跟的所有列,不仅仅是第一列。
select distinct vend_id from products; 输出: ----------------- DLL01 BRS01 FNG01
DISTINCT作用于后跟的所有列,不仅仅是第一列。
--------------
select distinct vend_id, prod_price from products; 输出:----------------- DLL01 3.49 BRS01 5.99 BRS01 8.99 BRS01 11.99 DLL01 4.99 FNG01 9.49
5、限制结果
SQL没有这个功能,但MYSQL有LIMIT和OFFSET语法
LIMIT 数字:最多返回多少行。
LIMIT 数字 OFFSET 数字:从第几行开始最多返回多少行,简写:limit 2,3 表示limit 3 offset 2,OFFSET是从0开始,1是指第2行。
select prod_name from products limit 5; 输出 ---------------- Fish bean bag toy Bird bean bag toy Rabbit bean bag toy 8 inch teddy bear 12 inch teddy bear
select prod_name from products limit 5 offset 5; 输出 ----------------- 18 inch teddy bear Raggedy Ann King doll Queen doll
6、三种注释
方式一:--行内注释
方式二:#行内注释
方式三:/**/块注释
7、排序检索数据
语法:子句(clause):SQL语句由子构成,有些子句是必须的,有些是可选的,一个子句通常是一个关键字加上所提供的数据组成。
#输入 select prod_name from products; /*输出: prod_name -------------------- Fish bean bag toy Bird bean bag toy Rabbit bean bag toy 8 inch teddy bear 12 inch teddy bear 18 inch teddy bear Raggedy Ann King doll Queen doll */
#输入 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 */
order by 子句可以对输出进行排序,指定order by子句,应该保证它是select语句中最后一条子句,否则会出现错误信息。
7.1、按多个列排序
要按多个列排序。简单指定列名,列名之间用逗号分开(同选择多列一样)。先对prod_price排序,如果有相同的prod_price,再对prod_name排序。
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 */
7.2按列位置排序(相对位置),order by 2:表示按select清单中第二个列prod_price排序,order by 2,3表示先按prod_price,再按prod_name排序。
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 */
7.3指定排序方向
可做升序(默认ASC关键字)或者降序排序,指定DESC(降序)关键字。
DESC关键字只应用到直接位于其前面的列名,order by prod_price DESC, prod_name,prod_price有作用,prod_name无作用。
如果想在多个列上进行降序排序,则必须对每一个列指定DESC关键字。
select prod_id, prod_price, prod_name from products order by prod_price desc; /*输出降序 prod_id, prod_price, prod_name BR03 11.99 18 inch teddy bear RYL01 9.49 King doll RYL02 9.49 Queen doll BR02 8.99 12 inch teddy bear BR01 5.99 8 inch teddy bear RGAN01 4.99 Raggedy Ann BNBG01 3.49 Fish bean bag toy BNBG02 3.49 Bird bean bag toy BNBG03 3.49 Rabbit bean bag toy */
select prod_id, prod_price, prod_name from products order by prod_price desc, prod_name; /* prod_id, prod_price, prod_name BR03 11.99 18 inch teddy bear RYL01 9.49 King doll RYL02 9.49 Queen doll BR02 8.99 12 inch teddy bear BR01 5.99 8 inch teddy bear RGAN01 4.99 Raggedy Ann BNBG02 3.49 Bird bean bag toy BNBG01 3.49 Fish bean bag toy BNBG03 3.49 Rabbit bean bag toy */
select prod_id, prod_price, prod_name from products order by prod_price desc, prod_name desc; /* prod_id, prod_price, prod_name BR03 11.99 18 inch teddy bear RYL02 9.49 Queen doll RYL01 9.49 King doll BR02 8.99 12 inch teddy bear BR01 5.99 8 inch teddy bear RGAN01 4.99 Raggedy Ann BNBG03 3.49 Rabbit bean bag toy BNBG01 3.49 Fish bean bag toy BNBG02 3.49 Bird bean bag toy */