0
点赞
收藏
分享

微信扫一扫

数据库的查询



文章目录

  • 一、单表查询
  • 二、聚合函数查询
  • 三、连接查询
  • 1、内连接
  • 2、左连接
  • 3、右连接
  • 四、子查询
  • 五、合并查询结果
  • 六、定义表和字段的别名
  • 七、使用正则表达式查询


一、单表查询

// 查询所有字段
SELECT * FROM db_student; 
SELECT id,name FROM db_student; // 查询指定字段

// 条件查询(WHERE)
SELECT * FROM db_student WHERE id="2018-1";
SELECT * FROM db_student WHERE score>80 AND gender="男"; // 多条件查询
SELECT * FROM db_student WHERE score>80 OR gender="男"; 

// 在给定的元素集合中查找(IN)
SELECT * FROM db_student WHERE score IN (66,93); 
SELECT * FROM db_student WHERE score NOT IN (66,93);

// 在某一个范围内查找(Between AND)
SELECT * FROM db_student WHERE score BETWEEN 66 AND 93; 
SELECT * FROM db_student WHERE score NOT BETWEEN 66 AND 93;

// 模糊查询(LIKE)
SELECT * FROM db_student WHERE id LIKE "_8%"; // 查询id中第二位是8的所有学生(下划线匹配一个字符,%匹配多个字符)
SELECT * FROM db_student WHERE id LIKE "%-8%";

// 空值查询(IS NULL)
SELECT * FROM db_student WHERE id IS NULL;
SELECT * FROM db_student WHERE id IS NOT NULL;

// 去除结果中重复的行
SELECT DISTINCT gender FROM db_student;
	
// 对查询结果排序(ORDER BY表示对指定的列进行操作,一般用于排序)
SELECT * from db_student ORDER BY score ASC; // 升序
SELECT * from db_student ORDER BY score DESC; // 降序

// 分组查询(GROUP BY按照查询结果集中的某一列(或多列),进行分组)
SELECT gender,GROUP_CONCAT(id) FROM db_student GROUP BY gender; // 以gender作为标准分组,每一组中把id进行联合排列
SELECT gender,count(id) FROM db_student GROUP BY gender; // 使用聚合函数进行一些操作,count表示统计不同值的记录
SELECT gender,count(id) FROM db_student GROUP BY gender HAVING count(id)>4; // HAVING:查询时满足的第二个条件
SELECT gender,count(id) FROM db_student GROUP BY gender WITH ROLLUP; // WITH ROLLUP:求总和(如果是字符串类型则是所有字符串的结合)
SELECT gender,GROUP_CONCAT(id) FROM db_student GROUP BY gender WITH ROLLUP;

// 限定查询结果
SELECT * from db_student LIMIT 0,5; // 从某个位置开始取出多条数据

二、聚合函数查询

// 统计所有行数,total是别名
SELECT COUNT(*) AS total FROM db_student; 

// 分组统计所有行数
SELECT gender,COUNT(*) FROM db_student GROUP BY gender; 

// 以gender分组统计score的和
SELECT gender,SUM(score) FROM db_student GROUP BY gender; 

// 以gender分组统计score的平均值
SELECT gender,AVG(score) FROM db_student GROUP BY gender; 

// 以gender分组统计score的最大值
SELECT gender,MAX(score) FROM db_student GROUP BY gender; 

// 以gender分组统计score的最小值
SELECT gender,MIN(score) FROM db_student GROUP BY gender;

三、连接查询

// 笛卡尔乘积
SELECT * FROM t_book, t_bookType;  

// 内连接,显示表1和表2的交集(tb为t_book的别名)
SELECT * FROM t_book tb inner join t_bookType tby on tb.bookTypeId = tby.id;

// 左连接,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
SELECT * FROM t_book tb left join t_bookType tby on tb.bookTypeId = tby.id;

// 右连接,右表的记录将会全部表示出来,而左表只会显示符合搜索条件的记录。左表记录不足的地方均为NULL。
SELECT * FROM t_book tb right join t_bookType tby on tb.bookTypeId = tby.id;

// 复合条件连接查询
SELECT * FROM t_book tb inner join t_bookType tby on tb.bookTypeId = tby.id AND tb.price>70;

1、内连接

组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分

数据库的查询_查询

2、左连接

左(外)连接会将左表(a_table)的记录全部表示出来,而右表(b_table)只会显示符合搜索条件的记录,右表记录不足的地方均为NULL。

数据库的查询_sql_02

3、右连接

右(外)连接会将右表(b_table)的记录全部表示出来,而左表(a_table)只会显示符合搜索条件的记录,左表记录不足的地方均为NULL。

数据库的查询_字段_03

四、子查询

// 由内向外查询(一个查询语句的条件可能落在另一个select语句的查询结果中)
SELECT * FROM t_book WHERE bookTypeId IN (SELECT id FROM t_bookType);

// 比较运算
SELECT * FROM t_book WHERE price>=(SELECT price FROM t_pricelevel WHERE pricelevel=1); 

// 如果内存查询有结果(或者说存在)则执行外部的查询
SELECT * FROM t_book WHERE EXISTS (SELECT * FROM t_bookType);

// 满足任意一个条件
SELECT * FROM t_book WHERE price >= ANY (SELECT price FROM t_pricelevel); 

// 满足所有条件
SELECT * FROM t_book WHERE price >= ALL (SELECT price FROM t_pricelevel);

五、合并查询结果

// 将多个查询结果合并到一起并去除重复记录
SELECT id FROM t_book UNION SELECT id FROM t_bookType;

// 将多个查询结果合并到一起,不去除重复记录
SELECT id FROM t_book UNION ALL SELECT id FROM t_bookType;

六、定义表和字段的别名

SELECT * FROM t_book tb WHERE tb.id=1;

SELECT * FROM t_book AS tb WHERE tb.id=1;

七、使用正则表达式查询

// 满足[]条件中的任意一个
SELECT * FROM t_book tb WHERE tb.author REGEXP '[abe]';

// a*b表示b之前可以有零个或多个a
SELECT * FROM t_book tb WHERE tb.author REGEXP 'v*e';

// a*b表示b之前可以有一个或多个a
SELECT * FROM t_book tb WHERE tb.author REGEXP 'v+e';

举报

相关推荐

0 条评论