mysql语法解析

ads

数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等。



准备工作



创建商品表

# 创建商品表: 
CREATE TABLE product
(
    pid         INT PRIMARY KEY,
    pname       VARCHAR(20),
    price       DOUBLE,
    category_id VARCHAR(32)
);

插入数据

# 插入数据

INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001’);
INSERT INTO product(pid,pname,price,category_id) VALUES(2,'
海尔',3000,'c001’);
INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001’);
INSERT INTO product(pid,pname,price,category_id) VALUES(4,'
杰克琼斯',800,'c002’);
INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002’);
INSERT INTO product(pid,pname,price,category_id) VALUES(6,'
花花公子',440,'c002’);
INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002’);
INSERT INTO product(pid,pname,price,category_id) VALUES(8,'
香奈儿',800,'c003’);
INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003’);
INSERT INTO product(pid,pname,price,category_id) VALUES(10,'
面霸',5,'c003’);
INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004’);
INSERT INTO product(pid,pname,price,category_id) VALUES(12,'
香飘飘奶茶',1,'c005’);
INSERT INTO product(pid,pname,price,category_id) VALUES(13,'海澜之家',1,'c002');

select查询

# 根据某些条件从某个表中查询指定字段的内容
格式:select [distinct]*| 列名,列名 from 表where 条件


零基础mysql数据库入门到高级



简单查询




1.查询所有的商品.  

select *  from product;

# 2.查询商品名和商品价格. 

select pname,price from product;

# 3.查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.

select pname,price+10 from product;



条件查询





比较查询

查询商品名称为“花花公子”的商品所有信息:

SELECT * FROM product WHERE pname = ‘花花公子’;

查询价格为800商品

SELECT * FROM product WHERE price = 800;

查询价格不是800的所有商品

SELECT * FROM product WHERE price != 800;
SELECT * FROM product WHERE price <> 800;

查询商品价格大于60元的所有商品信息

SELECT * FROM product WHERE price > 60;

查询商品价格小于等于800元的所有商品信息

SELECT * FROM product WHERE price <= 800;


范围查询

查询商品价格在200到1000之间所有商品

SELECT * FROM product WHERE price BETWEEN 200 AND 1000;

查询商品价格是200或800的所有商品

SELECT * FROM product WHERE price IN (200,800);


逻辑查询

查询商品价格在200到1000之间所有商品

SELECT * FROM product WHERE price >= 200 AND price <=1000;

查询商品价格是200或800的所有商品

SELECT * FROM product WHERE price = 200 OR price = 800;

查询价格不是800的所有商品

SELECT * FROM product WHERE NOT(price = 800);


模糊查询

查询以'香'开头的所有商品

SELECT * FROM product WHERE pname LIKE '香%‘;

查询第二个字为'想'的所有商品

SELECT * FROM product WHERE pname LIKE '_想%‘;


非空查询

查询没有分类的商品

SELECT * FROM product WHERE category_id IS NULL;

查询有分类的商品

SELECT * FROM product WHERE category_id IS NOT NULL;



排序查询




通过order by语句,可以将查询出的结果进行排序。暂时放置在select语句的最后。

格式:SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;

 ASC 升序 (默认)

 DESC 降序


1.使用价格排序(降序)

SELECT * FROM product ORDER BY price DESC;

2.在价格排序(降序)的基础上,以分类排序(降序)

SELECT * FROM product ORDER BY price DESC,category_id DESC;



聚合查询




之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。

接下来我们学习如下五个聚合函数:

1、查询商品的总条数

SELECT COUNT(*) FROM product;

2、查询价格大于200商品的总条数

SELECT COUNT(*) FROM product WHERE price > 200;

3、查询分类为'c001'的所有商品的总和

SELECT SUM(price) FROM product WHERE category_id = 'c001‘;

4、查询分类为'c002'所有商品的平均价格

SELECT AVG(price) FROM product WHERE categ ory_id = 'c002‘;

5、查询商品的最大价格和最小价格

SELECT MAX(price),MIN(price) FROM product;



分组查询




分组查询是指使用group by字句对查询信息进行分组。

格式:SELECT 字段1,字段2… FROM 表名 GROUP BY 分组字段 HAVING 分组条件;

分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件

having与where的区别:

1).having是在分组后对数据进行过滤.,where是在分组前对数据进行过滤

2).having后面可以使用分组函数(统计函数),where后面不可以使用分组函数。


1 统计各个分类商品的个数

SELECT category_id ,COUNT(*) FROM product GROUP BY category_id ;

2 统计各个分类商品的个数,且只显示个数大于1的信息

SELECT category_id ,COUNT(*) FROM product GROUP BY category_id HAVING COUNT(*) > 1;



分页查询




分页查询在项目开发中常见,由于数据量很大,显示屏长度有限,因此对数据需要采取分页显示方式。例如数据共有30条,每页显示5条,第一页显示1-5条,第二页显示6-10条。

 格式:SELECT 字段1,字段2... FROM 表名 LIMIT M,N

M: 整数,表示从第几条索引开始,计算方式 (当前页-1)*每页显示条数

N: 整数,表示查询多少条数据

SELECT 字段1,字段2... FROM 表明 LIMIT 0,5
SELECT 字段1,字段2... FROM 表明 LIMIT 5,5


零基础mysql数据库入门到高级



多表查询




实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系,接下来我们将在单表的基础上,一起学习多表方面的知识。

准备工作
CREATE TABLE category (
cid VARCHAR(32) PRIMARY KEY ,
cname VARCHAR(50)
);
CREATE TABLE products(
pid VARCHAR(32) PRIMARY KEY ,
pname VARCHAR(50),
price INT,
flag VARCHAR(2), #是否上架标记为:1表示上架、0表示下架
category_id VARCHAR(32),
CONSTRAINT products_fk FOREIGN KEY (category_id) REFERENCES category (cid)
);


初始化数据

分类

#分类
INSERT INTO category(cid,cname) VALUES('c001','家电');
INSERT INTO category(cid,cname) VALUES('c002','服饰');
INSERT INTO category(cid,cname) VALUES('c003','化妆品');

商品

#商品
INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p001','联想',5000,'1','c001');
INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p002','海尔',3000,'1','c001');
INSERT INTO products(pid, pname,price,flag,category_id) VALUES('p003','雷神',5000,'1','c001');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p004','JACK JONES',800,'1','c002');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p005','真维斯',200,'1','c002');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p006','花花公子',440,'1','c002');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p007','劲霸',2000,'1','c002');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p008','香奈儿',800,'1','c003');
INSERT INTO products (pid, pname,price,flag,category_id) VALUES('p009','相宜本草',200,'1','c003');


多表查询

1.交叉连接查询(基本不会使用-得到的是两个表的乘积) 

语法:select * from A,B;

2.交集运算:内连接查询(使用的关键字 inner join  -- inner可以省略)

显示内连接:select * from A inner join B on 条件;

3.差集运算:外连接查询(使用的关键字 outer join -- outer可以省略)

左外连接:left outer join

select * from A left outer join B on 条件;

右外连接right outer join

select * from A right outer join B on 条件;

1.查询哪些分类的商品已经上架

#隐式内连接
SELECT DISTINCT c.cname FROM category c , products p
WHERE c.cid = p.category_id AND p.flag = '1';

#内连接
SELECT DISTINCT c.cname FROM category c
INNER JOIN products p ON c.cid = p.category_id
WHERE p.flag = '1';

2.查询所有分类商品的个数

#左外连接
INSERT INTO category(cid,cname) VALUES('c004','奢侈品');
SELECT cname,COUNT(category_id) FROM category c
LEFT OUTER JOIN products p
ON c.cid = p.category_id
GROUP BY cname;


子查询

子查询:一条select语句结果作为另一条select语法一部分(查询条件,查询结果,表等)。

select ....查询字段 ... from ... 表.. where ... 查询条件

举例: 查询“化妆品”分类上架商品详情

# 隐式内连接
SELECT p.* FROM products p , category c
WHERE p.category_id=c.cid AND c.cname = '化妆品';

子查询(作为查询条件)

# 子查询
##作为查询条件
SELECT * FROM products p
WHERE p.category_id =
(
SELECT c.cid FROM category c
WHERE c.cname='化妆品'
);

作为另一张表

 # 作为另一张表
SELECT * FROM products p ,
(SELECT * FROM category WHERE cname='化妆品') c
WHERE p.category_id = c.cid;

查询“化妆品”和“家电”两个分类上架商品详情

#查询“化妆品”和“家电”两个分类上架商品详情
SELECT * FROM products p
WHERE p.category_id in
(
SELECT c.cid FROM category c
WHERE c.cname='化妆品' or c.name='家电'
);




关于我们
|哔哩哔哩号|知乎账号
扫码关注
带你发现更多不一样



文末阅读原文,无须下载直接在线学习~

最后编辑于:2024/1/9 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com