MySQL查询语句
MySQL
一.MySQL基础
1.增删改
表:
1.增
-
方式一
insert into 表(列,列…) values(值,值…);
– 插入几个列, 就列出几个列,没有插入数据的列自动的赋值为null;
insert into product(pid,pname) values(null,'Mac');片
-
方式二
insert into 表 values(值,值…);
注:插入所有的列
insert into product values(null,'iPhonex',8000,10);
insert into product values(null,'苹果电脑',8000,100);
2.删
-
语法
delete from 表 [where条件];
delete from product where price < 5001;
3.改
-
语法
update 表 set 列 = 值 ,列= 值 [where 条件]
update product set price = 5000;
2.基础查询
- 查询所有的列的记录
-
语法
select * form 表
eg:
select * from product;
2.查询某张表特定列的记录
-
语法
select 列名,列名,列名… from 表
select pname, price from product
3.去重查询
-
语法
SELECT DISTINCT 字段名 FROM 表名; //要数据一模一样才能去重
select distinct price from product;
4.别名查询
-
语法
select * form 表 别名 where 别名.列名
select pname 商品名称, price 价格 from product;
5.逻辑运算&模糊查询
and (多个条件同时成立)
...and.. 闭区间(包含临界值)
--查询价格在10到100之间(包含10和100)
SELECT * FROM product WHERE price BETWEEN 10 AND 100;
or(多个条件任一成立)
-- 查询出商品价格 小于35 或者商品价格 大于900
SELECT * FROM product WHERE price > 900 OR price < 35;
in(包含查询)
--查询出商品分类ID在 1,3,4里面的所有商品
SELECT * FROM product WHERE cno IN (1,3,4)
like (模糊查询; 需要和占位符一起用; _占一位; %占0~n位)
查询姓张的用户 username like '张%'; 张 张三 张三三 张三三三
查询姓张的用户 (名字是两个字的) username like '张_';
查询名字叫张三的用户 username like '%张三%'; 张三
二.MySQL进阶
表:
1.排序查询
order by
–升序(默认)
SELECT * FROM product ORDER BY score ASC ;
–降序
SELECT * FROM product ORDER BY score DESC ;
–组合查询
select * from product order by score desc, age desc;
2.聚合函数
-
语法
SELECT 聚合函数(列名) FROM 表名 [where 条件];
– 求出学生表里面的最高分数 SELECT MAX(score) FROM student;
-
聚合函数会忽略空值NULL
3.分组查询
group by
-
语法
SELECT 字段1,字段2… FROM 表名 [where 条件] GROUP BY 列 [HAVING 条件];
eg:
根据性别分组, 统计每一组学生的总人数
select sex, count(*) from student group by sex;
在这里插入代码片 根据性别分组, 统计每一组学生的总人数> 5的(分组后筛选)
select sex, count(*) from student group by sex having count(*) > 5
面试题:
4.分页查询 limit
limit
-
语法
select … from … limit a ,b.
-
b: 一页显示的数量(我们根据需求自己定义的)
-
a: 从哪里开始查询(从0开始计数) ;
三.多表间的关系
1.一对多
- 在多方创建一个字段作为外键,指向一方主键
alter table product add foreign key(cid) references category(cid)
2.多对多
-
新建一张中间表,至少包含两个字段,都作为外键,分别指向各自的主键
alter table s_c_table add foreign key(sno) references student(sid); alter table s_c_table add foreign key(cno) references cource(cid);
四.MySQL多表查询
—多表查询最好用别名
1.内连接查询
隐式内连接
select [字段,字段,字段][*] from a,b where 连接条件 (a表里面的主键 = b表里面的外键)
显示内连接
select [字段,字段,字段][*] from a [inner] join b on 连接条件 [ where 其它条件]
2.外连接
1.左外连接
可以理解为:在内连接的基础上保证左边表的数据全部显示
-
语句
select 字段 from a left [outer] join b on 条件
例:
SELECT * FROM t_category c LEFT OUTER JOIN t_product p ON c.cid = p.cno
2.右外连接
可以理解为:在内连接的基础上保证右边表的数据全部显示
-
语句
select 字段 from a right [outer] join b on 条件
例:
SELECT * FROM t_category c RIGHT OUTER JOIN t_product p ON c.cid = p.cno
3.子查询(要多练)
表:
1.子查询的结果是一个值的情况
1.子查询结果只要是单行单列,肯定在WHERE后面作为条件,父查询使用:比较运算符,如:> 、<、<>、= 等
SELECT 查询字段 FROM 表 WHERE 字段=(子查询);
2.查询类别是手机数码的所有商品信息
select *from product where cno = (SELECT cid FROM category where cname ='手机数码');
3.查询和方便面是同一类别的商品信息,但是不包括方便面
SELECT *from product where cno = (SELECT cno from Product where pname ='方便面') and pname <> '方便面';
2.子查询的结果是单列多行的情况
1.子查询结果是单例多行,结果集类似于一个数组,父查询使用IN运算符
SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询);
2.查询类别属于手机数码和食物的商品信息
SELECT * FROM t_product WHERE cno in (SELECT cid FROM t_category WHERE cname in('手机数码','食物'));
3.子查询的结果是多行多列的情况
表:
1.子查询结果只要是多列,肯定在FROM后面作为表; 子查询作为表需要取别名,否则这张表没有名称则无法访问表中的字段
SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件;
2.查询所属类别编号(cno)是1的商品里面的最高价格
SELECT MAX(c1.price) from (SELECT * FROM product where cno = 1) as c1
上一篇: 逆置一个单链表的三种方法
下一篇: MySQL开发技巧(一)