查询列
选择所有列
在select关键字后面加*,表示选择所有列。
语法:
select * from 表名;
选择指定列
语法:
select 列名1,列名2 from 表名;
查询行
语法:
select 列1, 列2 from 表名 where 条件表达式;
满足条件表达式的行都会被保留。where语句紧跟from子句。
注意:
- 条件表达式中的不等于可以用
!=
,<>
表示。 - 可以用
between ... and
指定范围,包含上限和下限。 - 可以用
in
指定某值在某集合中。 - 可以用
like
执行有效搜索串值的通配符搜索,其中%
表示零个或多个字符,_
表示一个字符,具体可以看下面的例子4。 - 查询null时,需要使用
is
或is not null
。 - 逻辑表达式可以用
or
、and
、not
表示,其含义和python语言的逻辑表达式一样。 - 优先级规则:
算术运算
、not
、and
、or
。
例子1:
从student表中筛选ssex为男
的名字。
SELECT sname, ssex from student WHERE ssex='男';
例子2:
在book表中查询价格在20到30之间的书籍名称。
SELECT bname, bprice from book
WHERE bprice BETWEEN 20 AND 30;
例子3:
在student表中查询属于物理系或数学系学生的名称。
SELECT DISTINCT sname, sdept from student
WHERE sdept in ('物理系', '数学系');
例子4:
在product表中查询product_name包含联想的名称。
SELECT product_name from product
WHERE product_name LIKE '%联想%';
例子5:
查询sc表中grade为null的cno。
SELECT cno, grade from sc
WHERE grade is NULL;
例子6:
在student表中查询性别为男且sdept是计算机系的所有数据。
SELECT * from student
WHERE ssex='男' AND sdept='计算机系';
查询中的算术运算符
语法:
select 列名, 表达式, ... from 表名;
只需要在列后面添加算数表达式即可。如下,查询产品打九折以后的价格。
SELECT product_name, price, price*0.9 from product;
查询中的取别名
列别名
语法:
select 列名 as 列别名 from 表名 where 条件表达式;
或者
select 列名 列别名 from 表名 where 条件表达式;
例子:
将product表中的product_name取别名为name
SELECT product_name as name from product;
表别名
语法:
select 表别名.别名 from 表名 as 表别名;
或者
select 表别名.别名 from 表名 as 表别名;
例子:
查询product表中product_name,并把表名取别名为p,product_name取别名为name
SELECT p.product_name as name from product as p;
查询中的去重
语法:
select distinct 列名1, 列名2 from 表名;
注意:选多个列的话,去重时去重的是多个列公共的行。
例子:
将student表中的ssex列去重
SELECT DISTINCT ssex from student;
order by排序
单列排序
注意:order by
需要位于SQL语句的最后。
SELECT 语句的执行顺序如下:
- FROM 子句
- WHERE 子句
- SELECT 子句
- ORDER BY 子句
order by
默认升序,也可以用关键字acs
升序、desc
降序。
语法:
select 列名1, 列名2, ... from 表名 order by 列名 asc;
例子:
查询student表中的sname和sage列,且按sage降序排列。
SELECT sname, sage from student
ORDER BY sage DESC;
多列排序
语法:
select 列名1, 列名2, ... from 表名 order by 列名1, 列名2...;
排序顺序是,列名1, 列名2,也就是先按列名1排序,在列名1排序好后,列名1中若有相同的数据,则在按列名2排序。
例子:
在orders表中,查询status, total_money的数据,其中status升序,total_money降序。
SELECT status, total_money from orders
ORDER BY status ASC, total_money DESC;
使用别名排序
语法:
select 列名 as 别名 from 表名 order by 别名;
例子:
查询student表中的sname和sage列,其中sage列取别名为age,且按sage降序排列。
SELECT sname, sage as age from student
ORDER BY age DESC;