查询语句
select语句的语法格式如下:
select 字段列表
from 数据源
[ where条件表达式 ]
[ group by 分组字段
[ having条件表达式 ]
[ order by 排序字段 [ asc | desc ] ]
查询表达式
每一个表达式表示想要的一列,必须至少有一列,多个列之间以逗号分隔
*表示所有列,tbl_name.*可以表示命名表的所有列
查询表达式可以使用[as] alias_name为其赋予别名
单表简单查询
查询表中全部数据
SELECT * FROM stu;
查询表中特定字段
SELECT id,newname FROM stu;
为字段取别名
SELECT username AS ‘姓名’, sex ‘性别’ FROM usertbl;
为表取别名
SELECT * FROM stu;
为字段指定表名
SELECT usertbl.username,usertbl.sex FROM usertbl;
为表名指定库名
SELECT username,sex,age FROM cms.usertbl;
使用常量进行查询
SELECT 1,2,3,username FROM usertbl;
Order By 排序
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
影响排序的关键字:ASC,DESC。
按出生日期排序显示用户信息
SELECT * FROM users ORDER BY birth;
按工资排序降序显示用户信息,如果工资相同则按姓名字母顺序显示
SELECT * FROM users WHERE salary IS NOT NULL ORDER BY salary DESC, cname ASC;
Limit关键字
在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据
SELECT * FROM table LIMIT [offset,] rows | rows
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。
如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。
初始记录行的偏移量是 0(而不是 1)
检查记录行,第0行开始,共返回10行记录
SELECT * FROM table LIMIT 0,10;
检查记录行,第100行开始到最后1行(一个很大的值)
SELECT * FROM table LIMIT 99,18446744073709551615
返回前5行记录
SELECT * FROM table LIMIT 5
distinct关键字
使用distinct过滤结果集中的重复记录
Select distinct 字段名 from 表名;
例如:查询出stu表中所有的姓名,去掉重复的姓名
SELECT distinct newname FROM stu;
带条件的查询
带条件查询的基本语法
SELECT *|字段名 FROM 表
WHERE 条件表达式;
查询条件
符号
比较
=、、>=、!=、<>、<=>
制定范围
BETWEEN AND 、 NOT BETWEEN AND
匹配字符
LIKE 、 NOT LIKE、IN、NOT IN
是否为空
IS NULL 、 IS NOT NULL
多个查询条件
AND 、 OR
条件比较
查询姓名是zhangsan的员工信息
SELECT * FROM users WHERE cname='zhangsan';
查询id小于5的员工信息
SELECT * FROM users WHERE id<5;
查询工资不为5000的员工信息
SELECT * FROM users WHERE salary<>5000;
指定范围查询-between-and
查询工资在5000~8000之间的员工信息
SELECT * FROM users
WHERE salary BETWEEN 5000 AND 8000;
查询工资不在5000~8000之间的员工信息
SELECT * FROM users
WHERE salary NOT BETWEEN 5000 AND 8000;
注意:
1.BETWEEN…AND…语句要求值小的在前面,值大的在后面
2.BETWEEN…AND…语句查询范围包含起始终止值
3.NOT BETWEEN…AND…语句查询范围不包含起始终止值
指定范围查询-in
查询工资为5000, 6500 ,8000的员工信息
SELECT * FROM users WHERE salary IN (5000,6500,8000);
查询姓名为:qianli,Lily的员工信息
SELECT * FROM users WHERE cname IN (QianLI,Lily);
查询工资不为5000,8000的员工信息
SELECT * FROM users WHERE salary NOT IN (5000,8000);
匹配字符查询-like
通配符
‘’ 号 表示一个字符 A Like 'C’
‘%’号 表示0个或多个字符 B Like 'CO_%’
扩展的字符
“.”匹配任何单个的字符。一个字符类
“[]”匹配在方括号内的任意单个字符
“ * ”匹配零个或多个在它前面的东西
“^” 表示以什么开头的字符
“$” 表示以什么结尾的字符
使用扩展字符时,必须使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE)。
1、匹配单个字符,查询出stu表中所有的id
select * from stu where id rlike ‘.’;
2、查询出stu表中,以n开头的姓名
Select * from stu where newname rlike ‘^n’;
3、查询出stu表中,查询出以a-z开头的姓名
Select * from stu where newname rlike ‘^[a-z]’;
4、查询出stu表中,以n结尾的姓名
Select * from stu where newname rlike ‘n$’;
查询姓zhang的员工信息
SELECT * FROM users WHERE cname LIKE 'zhang%';
使用%通配任意多个字符,使用 _ 通配1个字符
SELECT * FROM users WHERE cname LIKE 'zhangsa_'
使用NOT LIKE表示不满足条件的结果
SELECT * FROM users WHERE cname NOT LIKE 'zhang%'
是否为空----IS NULL
查询工资为空的员工信息
SELECT * FROM users WHERE salary IS NULL;
查询工资不为空的员工信息
SELECT * FROM users WHERE salary IS NOT NULL;
备注:查询工资为空,可以使用<=>表达式
SELECT * FROM users WHERE salary <=> NULL;
多个查询条件-逻辑表达式
查询姓zhang的员工信息且性别为男的员工信息
SELECT * FROM users WHERE cname LIKE 'zhang%'
AND sex ='男'
查询1990年以前出生的或者工资大于8000的员工信息
SELECT * FROM users WHERE birth
salary > 8000
查询编号大于等于3年龄不为NULL的用户
SELECT * FROM users WHERE id >=3 AND age is NOT NULL
查询编号在5~10之间且用户名为单名(2位)的用户
SELECT * FROM users WHERE id BETWEEN 5 AND 10 AND
cname LIKE ‘__‘; (两个下划线)