Mysql查询

Mysql查询
一、基本查询语句
SELECT语句的基本语法如下:
select selection_list //要查询的内容,选择哪些列
from 数据表名 //指定数据表
where primary_constraint //查询时需要满足的条件,行必须满足的条件
group by grouping_columns //如何对结果进行分组
having secondary_constraint //查询时满足的第二条件
order by sorting_cloumns //如何对结果进行排序
limit count //限定输出的查询结果
二、单表查询
1、查询所有字段
SELECT * FROM 表名;
2、查询指定字段
SELECT 字段名 FROM 表名;
例:查询db_database09数据库tb_login表中的user和pwd两个字段
SELECT user,pwd FROM tb_login;
3、查询指定数据
例:应用WHERE子句查询tb_login表,条件是user(用户名)为mr
select * from tb_login where user = ‘mr’;
标准SQL语句中类型为字符串、文本、日期类型时必须加单引号
例:应用WHERE子句查询computer_stu表,条件是score(成绩)为85
select * from computer_stu where score = 85;
标准SQL语句中类型为数值型时不用加单引号
例:查询computer_stu表中score不等于85的记录
select * from computer_stu where score <> 85;
select * from computer_stu where score != 85;
查询指定数据
例:应用WHERE子句查询computer_stu表,条件是score(成绩)大于85
select * from computer_stu where score > 85;
4、带IN关键字的查询
其语法格式如下:
SELECT * FROM 表名 WHERE 条件 [NOT] IN(元素1,元素2,…,元素n);
例:应用IN关键字查询tb_login表中user字段为mr和lx的记录
SELECT * FROM tb_login WHERE user IN(‘mr’,‘lx’);
5、带BETWEEN AND的范围查询
SELECT * FROM 表名 WHERE 条件 [NOT] BETWEEN 取值1 AND 取值2;
例:查询computer_stu表中成绩在65-85之间的记录
SELECT * FROM computer_stu WHERE score BETWEEN 65 AND 85;
SELECT * FROM computer_stu WHERE score>=65 ANDscore<= 85;
6、带LIKE的字符匹配查询
LIKE属于较常用的比较运算符,通过它可以实现模糊查询。它有两种通配符:“%”和下划线“”;“%”可以匹配一个或多个字符,可以代表任意长度的字符串,长度可以为0“”只匹配一个字符
7、正则表达式
• 正则表达式是用某种模式去匹配一类字符串的一个方式。正则表达式的查询能力比通配字符的查询能力更强大,而且更加的灵活。
• 在MySQL中,使用REGEXP关键字来匹配查询正则表达式。其基本形式如下:
字段名 REGEXP ‘匹配方式’
• 匹配指定字符中的任意一个使用方括号([])可以将需要查询字符组成一个字符集。只要记录中包含方括号中的任意字符,该记录将会被查询出来。
• 使用“”和“+”来匹配多个字符正则表达式中,“”和“+”都可以匹配多个该符号之前的字符。但是,“+”至少表示一个字符,而“”可以表示0个字符。
• 匹配以指定的字符开头和结束的记录正则表达式中,^表示字符串的开始位置,$表示字符串的结束位置。
8、用IS NULL关键字查询空值
IS NULL关键字可以用来判断字段的值是否为空值(NULL)。如果字段的值是空值,则满足查询条件,该记录将被查询出来。如果字段的值不是空值,则不满足查询条件。其语法格式样如下:IS [NOT] NULL
9、带AND的多条件查询
select * from 数据表名 where 条件1 and 条件2 […AND 条件表达式n];
例:查询数据表tb_login中user字段值为mr,并且section字段值为PHP的记录
select * from tb_login where user=‘mr’ and section=‘php’;
10、带OR的多条件查询
select * from 数据表名 where 条件1 OR 条件2 […OR 条件表达式n];
例:查询tb_login表中section字段的值为“PHP”或者“程序开发”的记录
select * from tb_login where section=‘php’ or section=‘程序开发’;
11、用DISTINCT关键字去除结果中的重复行
select distinct 字段名 from 表名;
例:使用关键字DISTINCT去除 tb_login表中name字段中的重复记录
select distinct name from tb_login;
12、用ORDER BY关键字对查询结果排序
ORDER BY 字段名 [ASC|DESC];
ASC表示按升序进行排序 DESC表示按降序进行排序
例:查询tb_login表中的所有信息,按照id序号进行降序排列
select * from tb_login order by id desc;
13、用GROUP BY关键字分组查询
1、使用关键字GROUP BY来分组
2、关键字GROUP BY与GROUP_CONCAT()函数一起使用,group_concat()函数能将group by产生的同一个分组中的值连接起来,返回一个字符串结果
3、按多个字段进行分组
例:使用关键字GROUP BY对tb_book表中talk字段进行分组查询
select id,books,talk from tb_book GROUP BY talk;
例:使用关键字GROUP BY和GROUP_CONCAT()函数对tb_book表中的talk字段进行分组查询
use db_database08;
SELECT author,GROUP_CONCAT(bookname) FROM tb_bookinfo GROUPBY author;
例:对数据表tb_book表中user字段和talk字段进行分组,分组过程中,先按照user字段进行分组,当user字段的值相等时,再按照talk字段进行分组
select id,books,talk,user from tb_book GROUP BY user,talk;
14、Having子句
对分组的数据再进行过滤,需要使用having子句
例:在school库的school表中,按照班级对学生进行分组,并查询出每个班级的学生数,学生的平均身高,最低年龄身高
SELECT class,COUNT(class),AVG(height),MIN(height) FROM school
GROUP BY class;
例:查询出存在身高低于160的班级及班级人数
SELECT class,COUNT(class),AVG(height),MIN(height) FROM school
GROUP BY class HAVING MIN(height)<160;
15、用LIMIT限制查询结果的数量
查询数据时,可能会查询出很多的记录。而用户需要的记录可能只是很少的一部分。这样就需要来限制查询结果的数量。LIMIT是MySQL中的一个特殊关键字。
LIMIT子句可以对查询结果的记录条数进行限定,控制它输出的行数。注意:LIMIT子句中的编号是从0开始的。
例:查询数据表tb_login中,按照id编号进行升序排列,显示前3条记录
select * from tb_login order by id asc limit 3;
例:查询tb_login表中,按照id编号进行升序排列,从编号1开始,查询两条记录
select * from tb_login where id order by id asc limit 1,2;
16、聚合函数查询
聚合函数的最大特点是它们根据一组数据求出一个值。聚合函数的结果值只根据选定行中非NULL的值进行计算,NULL值被忽略。
1.COUNT()函数
COUNT()函数,对于除“
”以外的任何参数,返回所选择集合中非NULL值的行的数目;对于参数“”,返回选择集合中所有行的数目,包含NULL值的行。没有WHERE子句的COUNT()是经过内部优化的,能够快速的返回表中所有的记录总数。
例:使用count()函数统计数据表 tb_login中的记录数
select count(*) from tb_login;
2.SUM()函数
SUM()函数可以求出表中某个字段取值的总和。
例:使用sum()函数统计数据表 tb_book中图书的访问量字段(row)的总和
select row from tb_book;
select sum(row) from tb_book;
3.AVG()函数
AVG()函数可以求出表中某个字段取值的平均值。
例:使用AVG()函数求数据表tb_book中row字段值的平均值
select AVG(row) from tb_book;
4.MAX()函数
MAX()函数可以求出表中某个字段取值的最大值。
例:使用MAX()函数查询数据表tb_book中row字段的最大值
select MAX(row) from tb_book;
5.MIN()函数
MIN()函数可以求出表中某个字段取值的最小值。
例:使用MIN()函数查询数据表tb_book中row字段的最小值
select MIN(row) from tb_book;
17、日期和时间函数
日期和时间函数是MySQL中另一最常用的函数。其主要用于对表中的日期和时间数据的处理。
1.CURDATE()函数和CURRENT_DATE()函数
CURDATE()和CURRENT_DATE()函数获取当前日期。
2.CURTIME()函数和CURRENT_TIME()函数
CURTIME()和CURRENT_TIME()函数获取当前时间。
3.NOW()函数
NOW()函数获取当前日期和时间。还有CURRENT_TIMESTAMP()函数、LOCALTIME()函数、SYSDATE()函数和LOCALTIMESTAMP()函数也同样
可以获取当前日期和时间。
select NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE();
18、连接查询
在实际开发中,数据往往不是存放储在一张表中,而是同时存储在多张表中,这些表与表存在着关系,我们在查询数据的时候往往需要多张表联合起来查询,这种多表联合查询被称为连接查询或跨表查询。
1.内连接查询
只连接匹配的行,即A表与B表相连接,能够匹配的记录查询出来
等值连接
例:查询员工的名称和员工所对应的部门名称
select e.ename,d.dname from emp e inner join dept d on e.deptno =
d.deptno;
非等值连接
例:查询员工的工资等级
select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
自连接
例:查询员工的名称和员工对应的领导名称
select a.ename empname ,b.ename leadername from emp a join emp b
on a.mgr = b.empno;
2.外连接查询
A表和B表能够完全匹配的记录查询出来之外,将其中一张表的记录无条件的完全查询出来,对方表没有匹配的记录时,会自动模拟出null值于之匹配;
注意:外连接的查询结果条数 >= 内连接的查询结果条数
左外连接(左连接)
包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行;
SELECT section,tb_login.user,books,ROW FROM tb_login LEFT JOIN
tb_book ON tb_login.user=tb_book.user;
右外连接(右连接)
包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
SELECT section,tb_book.user,books,ROW FROM tb_login RIGHT JOIN
tb_book ON tb_login.user=tb_book.user;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值