mysql中常用查询_Mysql常用查询

IN/NOT IN操作符:查询满足(不满足)指定范围内的条件的记录。

s_id为101和102的记录:

MYSQL> SELECT s_id, s_name FROM fruits WHERE s_id IN (101,102);

s_id不等于101和102的记录:

MYSQL> SELECT s_id, s_name FROM fruits WHERE s_id NOT IN (101,102);

BETWEEN AND/NOT BETWEEN AND查询: 查询指定范围内(外)的值(包括两个端点值),参数:范围的开始值和结束值。

查询f_price在2~10之间的记录:

MYSQL> SELECT f_name, f_price FROM fruits WHERE f_price BETWEEN 2 AND 10;

LIKE操作符: 模糊查询,“%”匹配任意长度的字符,“_”匹配任意一个字符。

查询以b开头的记录:

MYSQL> SELECT f_name FROM fruits WHERE f_name LIKE 'b%';

查询匹配ball的记录:

MYSQL> SELECT f_name FROM fruits WHERE f_name LIKE 'bal_';

NULL值查询: 如果某个字段设置为NULL(NULL不等于0,也不等于空字符串),则可使用IS NULL查询:

查询f_name字段为NULL的记录:

MYSQL> SELECT f_name FROM fruits WHERE f_name IS NULL;

ORDER BY DESC/ASC: 降序/升序排序

MYSQL> SELECT f_name FROM fruits ORDER BY f_name DESC;

GROUP BY: 对数据按照某个字段或多个字段进行分组,和集合函数一起使用,MAX(),MIN(),COUNT(),SUM(),AVG()(以分组后的每一组为单位使用上述函数)

GROUP BY 字段 HAVING 条件表达式;

根据s_id对记录进行分组:

MYSQL> SELECT s_id, COUNT(*) AS Total FROM fruits GROUP BY s_id;

GROUP_COUNT: 显示每个分组中的字段值

MYSQL> SELECT s_id, GROUP_COUNT(f_name) AS names FROM fruits GROUP BY s_id;

# 显示每个分组中的所有f_name字段。

HAVING 过滤分组

MYSQL> SELECT s_id, s_name FROM friuts GROUP BY s_id HAVING COUNT(f_name) > 1;

# 显示f_name数量大于1的分组信息。

WITH ROLLUP: 显示分组后数据的所有记录

MYSQL> SELECT s_id, COUNT(*) FROM fruits GROUP BY s_id WITH ROLLUP;

多字段分组:

MYSQL> SELECT * FROM fruits GROUP BY s_id, f_name;

#首先根据s_id进行分组,再对每个分组里根据f_name进行分组。

LIMIT 限制查询结果:

LIMIT 位置偏移量(从哪一行开始), 行数

MYSQL>SELECT * FROM fruits LIMIT 4;

#第一行为0,默认从第一行开始

内连接查询(INNER JOIN):

MYSQL> SELECT t_1.name, s_name FROM fruits, t_1 WHERE fruits.s_id = t_1.s_id;

MYSQL> SELECT t_1.name, s_name FROM fruits INNER JOIN t_1 ON fruits.s_id = t_1.s_id;

上述两个sql语句结果一致。

注:如果一个连接查询中,涉及到的连个表是同一个表,这种查询成为自连接查询。

MYSQL> SELECT f1.f_name, f1.s_id FROM fruits AS f1, fruits AS f2 WHERE f1.s_id = f2.s_id;

左外连接查询(LEFT JOIN): 显示左表中的所有行,如果右表中没有对应的字段为NULL

MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 LEFT OUTER JOIN t_2 ON t_1.s_id = t_2.s_id;

右外连接(RIGHT JOIN): 显示右表中的所有行。

MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 RIGHT OUTER JOIN t_2 ON t_1.s_id = t_2.s_id;

符合条件连接查询

MYSQL> SELECT t_1.s_id, t_2.f_name FROM t_1 INNER JOIN t_2 ON t_1.s_id = t_2.s_id AND t_1.f_name = 'abc' ORDER BY t_1.f_name;

子查询(ANY,ALL,EXISTS):

ANY:

MYSQL> SELECT * FROM fruits WHERE s_id > ANY(SELECT s_id FROM t2);

# 返回大于子查询结果中最小值的所有记录。

ALL:

MYSQL> SELECT * FROM fruits WHERE s_id > ALL(SELECT s_id FROM t2);

# 返回大于子查询结果中最大值的所有记录。

EXISTS:

MYSQL> SELECT * FROM fruits WHERE EXISTS(SELECT s_id FROM t2);

# 子查询是否有记录。

NOT EXISTS:

MYSQL> SELECT * FROM fruits WHERE NOT EXISTS(SELECT s_id FROM t2);

# 如果子查询没有返回行则符合条件。

IN/NOT IN:

MYSQL> SELECT * FROM fruits WHERE s_id IN(SELECT s_id FROM t2);

=、!=:

MYSQL> SELECT * FROM fruits WHERE s_id = (SELECT s_id FROM t2 WHERE s_id = 1);

合并查询结果

UNION 不删除重复行,

UNION ALL删除重复行

MYSQL> SELECT s_id FROM fruits WHERE f_price < 9 UNION ALL SELECT s_id WHERE s_id IN(10,11);

正则表达式查询(REGEXP)

MYSQL>SELECT * FROM fruits WHERE f_name REGEXP '^b';

#查询f_name以b开头的记录。

mysql常用查询测试及答案: 参考链接: http://blog.sina.com.cn/s/blog_767d65530101861c.html -------------------创建如下表---------------------- 1.创建表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4), birth YEAR, department VARCHAR(20), address VARCHAR(50) ); CREATE TABLE score ( id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT, stu_id INT(10) NOT NULL, c_name VARCHAR(20), grade INT(10) ); 2.为student表和score表增加记录向student表插入记录的INSERT 语句如下: INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区'); INSERT INTO student VALUES( 902,'张老二', '男',1986,'文系', '北京市昌平区'); INSERT INTO student VALUES( 903,'张三', '女',1990,'文系', '湖南省永州市'); INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市'); INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市'); INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市'); 向score表插入记录的INSERT语句如下: INSERT INTO score VALUES(NULL,901, '计算机',98); INSERT INTO score VALUES(NULL,901, '英语', 80); INSERT INTO score VALUES(NULL,902, '计算机',65); INSERT INTO score VALUES(NULL,902, '文',88); INSERT INTO score VALUES(NULL,903, '文',95); INSERT INTO score VALUES(NULL,904, '计算机',70); INSERT INTO score VALUES(NULL,904, '英语',92); INSERT INTO score VALUES(NULL,905, '英语',94); INSERT INTO score VALUES(NULL,906, '计算机',90); INSERT INTO score VALUES(NULL,906, '英语',85); --------练习及答案---------- -- 3.查询student表的所有记录 -- SELECT * FROM student -- 4.查询student表的第2条到4条记录 -- SELECT * from student LIMIT 1,4 -- 5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息 -- SELECT s.id,s.name,s.department FROM student s -- 6.从student表查询计算机系和英语系的学生的信息 -- SELECT * FROM student s WHERE s.department in ('英语系','计算机系') -- 7.从student表查询年龄18~22岁的学生信息 -- SELECT *,2015-s.birth AS age FROM student s WHERE 2015-s.birth BETWEEN 20 and 25; -- SELECT *,2015-birth AS age FROM student s WHERE 2015-birth>=18 AND 2015-birth<=2 -- 8.从student表查询每个院系有多少人 -- SELECT department, COUNT(1) FROM student s GR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值