MySQL数据库之查询专题

MySQL查询

字段表示法:
*:所有字段
as:字段别名,col1 AS alias1
1 数据库关联查询
1.1内连接查询(inner join)
查询两个表共有的数据,交集
SELECT * FROM table1 INNER JOIN tb2 ON 条件
1.2 左表查询(左关联查询)(left join)
查询两个表共有的数据,和左表所有的数据,左表有右表没有的部分用null代替
SELECT * FROM tb1 LEFT JOIN tb2 ON 条件
1.3 右表查询(右关联查询)(right join)
查询两个表共有的数据,和右表表所有的数据,右表有左表没有的部分用null代替
SELECT * FROM tb1 RIGHT JOIN tb2 ON 条件
2 数据库条件查询
2.1 语句
SELECT * FROM 表名称 WHERE age=18
2.2 运算符
2.2.1比较运算符
>、<、=、>=、<=、<>、!=

2.2.2逻辑运算
and or not
例:select * from 表名称 where 条件一 and 条件二 …
2.3数据库模糊查询
% 匹配 0到多个字符
_:任意单个字符
例如:SELECT * FROM student WHERE name LIKE “小%”
2.4范围查询
between … and …(相当于>=和<=之间) in
例如 SELECT * FROM student WHERE age in (17,18,20,21)
2.5空值匹配
为空 SELECT * FROM student WHERE age is Null
不为空 SELECT * FROM student WHERE age is not Null
2.6排序
(1)以年龄排序
SELECT * FROM student ORDER BY age;
(2)多条件排序,第一个条件为主排序条件
SELECT * FROM student ORDER BY age,name;
(3)排倒叙
SELECT * FROM student ORDER BY age desc;
(4)筛选和排序连用(先筛选再排序)
SELECT * FROM student WHERE 条件 ORDER BY age;
2.7 子查询
子查询是一种嵌套查询,将一个查询用小括号包围起来,然后作为下一个查询的结果,子查询必须有别名。
SELECT nan.name FROM (SELECT name,age FROM student WHERE gender=”男” ) AS nan WHERE age = 18;
2.8 限制查询
LIMIT(只显示其中部分内容),可以偏移限制查找。)
Limit 3 <==> limit 0,3
例如SELECT * FROM student ORDER BY age LIMIT 2;
3 多表查询
3.1多表连接方式
(1)交叉连接:笛卡尔积效应(最耗资源,效率极其低)
等值连接
(2)内连接 表的字段以等值建立连接关系,两个表中具有相同意义的字段(有关联意义的字段)以相等方式进行判断,进行连接。左右表能相等的行直接构建成新行,不相等的排除在外。
(3)外连接:(也是基于等值连接,但是要考虑空的情况)
左外连接:FROM tb1 LEFT JOIN tb2 ON tb1.co1=tb2.col
右外连接:FROM tb1 RIGHT JOIN tb2 ON tb1.co1=tb2.col
3.2内连接查询
select * from major inner join major_course inner join course where major.id = major_course.major_id and major_course.course_id = course.id and major.id= 1;
3.3关联子查询
查询又有含有计算机基础的专业
SELECT NAME FROM major WHERE id IN (SELECT mc.major_id FROM
course AS c LEFT JOIN major_course AS mc ON c.id = mc.course_id
WHERE c.id = 1);
4 SELECT之高级查询
4.1 SELECT

SELECT语句默认查询后会被缓存,方便下次查询
SQL_CACHE:显示指定存储查询结果于缓存之中。
查询sql缓存是否开放 show global variables like ‘query%’;

4.2 SELECT语句的执行过程
from clause —> where clause —> select —>group by —> having—>order by —> limit

写法顺序
select col1,… from clause —> where clause —> group by —> having—> order by —> limit
4.3 数据去重DISTINCT
格式:select distinct col_name from tbl_name;
联合去重,distinct 后加多列
4.4 表别名
字段显示可以使用别名 AS,同时表也可以使用别名
SELECT col_name AS col_alias_name FROM tbl_name AS tbl_alias_name;
4.5 算术操作以及调用函数
统计函数:avg(),平均数 max(),最大值 min(),最小值
count(),计数统计 sum(),合计
select now(),version(),(3+5)*2;
4.6 where子句其他用法
过滤条件:真或假
支持比较操作符 = != (<>)
支持算术操作:+ - * / %

比较操作符之IN:
IN (元素1,元素2…)
等价写法:
score between 10 and 20 <> score>=10 and score<=20
cno in (1,2,3) <
=> cno=1 or cno=2 or cno=3
4.7 group by子句:分组聚合运算
group by: 根据指定的列把查询结果进行“分组”;目的 -----> 用于做聚合运算
例:select avg(col_name) from tbl_name group by an_col_name;
4.8 having子句:分组聚合运算结果过滤
having 字句的列可以有2种:
分组特性列,group by 后面的列 聚合函数
5 套表查询(内联视图,in-line view,属于子查询)
将查询的结果做为表来嵌套查询,MySQL必须给查询的结果起个别名
6 复合查询union, union all
将多个表的查询结果进行联合在一起。
select col_name from tb1_name union select col_name from tb2_name;

union : 重复的行记录只显示一次
union all: 不合并重复记录
7 复制表
create table class1 as select * from class; 复制class表到class1表带结构和数据
create table class1 as select * from class where 1=2;复制class表到class1表带结构
create table class1 like class; 复制class表到class1表带结构,mysql写法,索引和主键也会复制,没有数据

你可能感兴趣的:(数据库,MySQL,数据库,查询)