MySQl 查询公式

下面是代码

将代码保存后可以随时更改调用

-- 创建数据库
CREATE DATABASE mydb2;
USE mydb2;
-- 创建商品表
CREATE TABLE product(
	pid int PRIMARY KEY auto_increment, -- 商品编号
	pname VARCHAR(20) not null, -- 商品名字
	price DOUBLE, -- 商品价格
	category_id VARCHAR(20) -- 商品所属分类
	);
-- 插入商品数据
	INSERT INTO product VALUES(NULL,'海尔洗衣机',5000,'c001');
	INSERT INTO product VALUES(NULL,'美的冰箱',3000,'c001');
	INSERT INTO product VALUES(NULL,'格力空调',5000,'c001');
	INSERT INTO product VALUES(NULL,'九阳电饭煲',5000,'c001');
	insert into product values(null,' 啄木鸟衬衣 ',300,'c002');
	insert into product values(null,' 恒源祥西裤 ',800,'c002');
	insert into product values(null,' 花花公子夹克 ',440,'c002');
	insert into product values(null,' 劲霸休闲裤 ',266,'c002');
	insert into product values(null,' 海澜之家卫衣 ',180,'c002');
	insert into product values(null,' 杰克琼斯运动裤 ',430,'c002');
	insert into product values(null,' 兰蔻面霜 ',300,'c003');
	insert into product values(null,' 雅诗兰黛精华水 ',200,'c003');
	insert into product values(null,' 香奈儿香水 ',350,'c003');
	insert into product values(null,'SK-II 神仙水 ',350,'c003');
	insert into product values(null,' 资生堂粉底液 ',180,'c003');
	insert into product values(null,' 老北京方便面 ',56,'c004');
	insert into product values(null,' 良品铺子海带丝 ',17,'c004');
	insert into product values(null,' 三只松鼠坚果 ',88,null);
-- 	简单查询
	#查询所有列
	SELECT * FROM product;
  
	#查询指定的列
	SELECT pname,price FROM product;
	
	#表别名 as可以省略,在多表查询有用 
	SELECT * FROM product as p;
	
	#给列起别名
	SELECT pname '商品名',price '商品价格' FROM product;
	
	#去掉商品价格重复值
	SELECT DISTINCT price FROM product;
	
	SELECT DISTINCT * FROM product;

	#查询结果是表达式(运算查询):将所有的商品的加价10元进行显示
	SELECT pname,price + 10 new_price FROM product;
	
-- 运算符
	
	#算术运算符
	SELECT 6 + 2;
	SELECT 6 - 2;
	SELECT 6 * 2;
	SELECT 6 / 2;
	SELECT 6 % 2;
	
	SELECT pname,price + 10 new_price FROM product;

	SELECT pname,price * 1.1 new_price FROM product;
	
	#逻辑运算符
	
	
	
-- 	查询商品名称为'海尔洗衣机'的商品所有信息:
		SELECT * FROM product WHERE pname = '海尔洗衣机';
		
		SELECT * FROM product WHERE price = 800;
		
		SELECT * FROM product WHERE price != 800;
		#或者 <> 800  或者not (price = 800);这些都是等价的
		
		SELECT * FROM product WHERE price >= 60;
		
		#查询商品价格在200到1000之间所有商品
		SELECT * FROM product WHERE price BETWEEN 200 and 1000;
		
		SELECT * FROM product WHERE price >= 200 and price <= 1000;
		
		SELECT * FROM product WHERE price >= 200 && price <=1000;
		
		#查询商品价格是200或者800所有商品
		SELECT * FROM product WHERE price in(200,800);
		
		SELECT * FROM product WHERE price = 200 or price = 800;
		
		SELECT * FROM product WHERE price = 200 || price = 800;
		
		#查询含有'裤'字的所有商品
		SELECT * FROM product WHERE pname like '%裤%'; #又来匹配任意字符 模糊匹配
		
		#查询含有'海'字的所有商品
		SELECT * FROM product WHERE pname like '海%';
		    
		#查询含有'蔻'的所有商品
		SELECT * FROM product WHERE pname like '_的%';
		
		#查询category_id为null的商品
		SELECT * FROM product WHERE category_id is NULL;
		
		#查询category_id不为null的商品
		SELECT * FROM product WHERE category_id is NOT NULL;
		
		#使用least求最小值
		SELECT LEAST(10,5,20) as small_number;
		
		SELECT LEAST(10,NULL,20);
		#如果值中有null,则不会比较,结果直接为null
		
		#使用greatest求最大值
		SELECT LEAST(10,20,30) as big_number;

		
		#位运算符
	 
	 SELECT 3 & 5; 	#位与
	 0011
	 0101
	 -- --------
-- 	1
	 SELECT 3|5;  #位或 只要里面有一个是一,结果就位一
	 0011
	 0101
	 -- --------
-- 	7
	 SELECT 3^5;  #位异或 不同为一, 相同为零
	 0011
	 0101
	 -- --------
-- 	6
		
	 SELECT 3>>1; #位右移
-- 	 0011  >> ---->0001
	 SELECT 3<<1; #位左移
-- 	 0011 << ---->0110
	 SELECT ~3;#位取反
-- 	 0011 ----> 就是将0变成1或者1变成0
		
		
		
	#排序查询
		
	SELECT * FROM product ORDER BY price;#默认升序
	
	#降序		
	SELECT * FROM product ORDER BY price DESC;
	
		
	SELECT * FROM product ORDER BY price DESC,category_id DESC;
		
	#去重排序	
	SELECT DISTINCT price FROM product ORDER BY price DESC;
	
	
	#聚合查询

	#查询商品的总条数
	SELECT COUNT(pid) FROM product;
	
	SELECT COUNT(*) FROM product;

	#查询价格大于200商品总条数
	SELECT COUNT(pid) FROM product WHERE price >200;
	
	#查询分类为'c001'的所有商品的总和
	SELECT SUM(price) FROM product WHERE category_id = 'c001';
	
	#查询商品最大价格
	SELECT MAX(price) FROM product;
	
	#查询商品最大小价格
	SELECT MIN(price) FROM product;
	
	SELECT MAX(price) max_price,MIN(price) min_price FROM product;
	
	#查询分类为'c002'所有商品的平均价格
	
	SELECT AVG(price) FROM product WHERE category_id = 'c002';
	
	
	#聚合函数-NULL值的处理
	
-- 	count,sum,max,min,avg聚合函数都会忽视null的存在
	
	
	#分组查询
	
	#统计各个分类商品的个数
	SELECT category_id,COUNT(pid) FROM product GROUP BY category_id;			
	#SELECT后面只能是分组的对象和聚合函数
	
	#分组之后的条件筛选-HAVING
	SELECT category_id, COUNT( pid ) FROM product GROUP BY category_id HAVING COUNT( pid ) > 4;
	
	#分页查询
	
	#查询表中的前5条记录
	SELECT * FROM product LIMIT 5;
	
	#从第四条显示,显示5条
-- 	从第条显示-1,显示多少条。
	SELECT * FROM product LIMIT 3,5;
	
	SELECT * FROM product LIMIT 0,60 -- 第一页 		(1-1) * 60
	
	SELECT * FROM product LIMIT 60,60  -- 第二页  (2-1) * 60
	
	SELECT * FROM product LIMIT 120,60   -- 第三页	(3-1)* 60
	
	SELECT * FROM product LIMIT (n-1)*60,60 -- 第n页
	
	
	#将一个表的数据导入到另一个表中
	
	CREATE TABLE product2(
	pname VARCHAR(20),
	price DOUBLE
	);
	 
	INSERT INTO product2(pname,price) SELECT pname,price FROM product;
	
	SELECT * FROM product2;
	#将每一个商品类型有多少个导入product3表中
	
	CREATE TABLE product3(
		category_id VARCHAR(20),
		price_count int
	);
	
	INSERT INTO product3 SELECT category_id,COUNT(*) FROM product GROUP BY category_id;
	
	SELECT * FROM product3;
	
	
	#正则表达式查询
	use mydb2;
	-- ^ 在字符串中开始处进行匹配
	SELECT 'abc' REGEXP '^a';
	SELECT * FROM product WHERE pname REGEXP '^海';
	
	-- $ 在字符串末尾开始匹配
	SELECT 'abc' REGEXP 'a$';-- 这个就是错误的
	
	SELECT 'abc' REGEXP 'c$';
	SELECT * FROM product WHERE pname REGEXP '水$';

	-- .匹配任意字符 可以匹配除了换行符外的任意字符
	SELECT 'abc' REGEXP '.b'; -- 1
	SELECT 'abc' REGEXP '.c'; -- 1
	SELECT 'abc' REGEXP 'a.'; -- 1
	
	-- [...] 匹配括号内的任意字符
	SELECT 'abc' REGEXP '[xyz]'; -- 0 
	-- 正则表达式的任意字符是否在前边的字符串中出现
	SELECT 'abc' REGEXP '[xyz]'; -- 1
	 
	-- [^...] 
	-- 注意^符合只有在[]内才能取反的意思,在别的地方都是表示开始匹配
	SELECT 'a' REGEXP '[^abc]';
	SELECT 'x' REGEXP '[^abc]';
	SELECT 'abc' REGEXP '[^a]'; -- 除了a之外其他字符有没有在前面出现
	
	-- a* 
-- 匹配0个或者多个a个,包括空字符串。可以作为占位字符使用,有没有字符都能匹配到数据
	SELECT 'stab' REGEXP 'ta*b'; -- 1
	SELECT 'stb' REGEXP 'ta*b'; -- 1
	SELECT '' REGEXP 'a*'; -- 1     
	
	-- a+ 匹配1个或者多个a,但是不包括空字符
	SELECT  'stab' REGEXP '.ta+b';
	SELECT  'stb' REGEXP '.ta+b';
	-- a? 匹配0个或则1个a
	SELECT 'stb' REGEXP '.ta?b'; -- 1
	SELECT 'stab' REGEXP 'ta?b'; -- 1
	SELECT 'staab' REGEXP 'ta?b';  -- 0
	
	-- a1|a2 匹配a1或者a2
	SELECT 'a' REGEXP 'a|b'; -- 1
	SELECT 'b' REGEXP 'a|b'; -- 1 
	SELECT 'b' REGEXP '^(a|b)'; -- 1
	SELECT 'a' REGEXP '^(a|b)'; -- 1 
	
	-- a{m} 匹配m个a
	SELECT 'auuuuc' REGEXP 'au{4}c'; -- 1
	
	SELECT 'auuuuc' REGEXP 'au{3}c'; -- 0
		-- a{m,} 匹配m个a或者更多a
	SELECT 'auuuuc' REGEXP 'au{4,}c'; -- 1
	SELECT 'auuuuc' REGEXP 'au{5,}c'; -- 0
	SELECT 'auuuuc' REGEXP 'au{3,}c'; -- 1

	-- a{m,n}  匹配m到n个a, 包括m和n至少m次最多n次
	
	SELECT 'auuuuc' REGEXP 'au{2,5}c'; -- 1
	SELECT 'auuuuc' REGEXP 'au{4,5}c'; -- 1
	SELECT 'auuuuc' REGEXP 'au{5,10}c'; -- 0

		
-- 	(abc)	#abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。
SELECT 'xababy' REGEXP 'x(abab)y'; -- 1
SELECT 'xababy' REGEXP 'x(ab)*y'; -- 1 
SELECT 'xababy' REGEXP 'x(ab){1,2}y';-- 1
SELECT 'xababy' REGEXP 'x(ab){3}y';-- 0

下面是一些mysql查询的练习题

可以自己练习一下

CREATE TABLE student ( id INT, NAME VARCHAR ( 20 ), gender VARCHAR ( 20 ), chinese INT, english INT, math INT );
INSERT INTO student ( id, NAME, gender, chinese, english, math )
VALUES
	( 1, '张明', '男', 89, 78, 90 );
INSERT INTO student ( id, NAME, gender, chinese, english, math )
VALUES
	( 2, '李进', '男', 67, 53, 95 );
INSERT INTO student ( id, NAME, gender, chinese, english, math )
VALUES
	( 3, '王五', '女', 87, 78, 77 );
INSERT INTO student ( id, NAME, gender, chinese, english, math )
VALUES
	( 4, '李一', '女', 88, 98, 92 );
INSERT INTO student ( id, NAME, gender, chinese, english, math )
VALUES
	( 5, '李财', '男', 82, 84, 67 );
INSERT INTO student ( id, NAME, gender, chinese, english, math )
VALUES
	( 6, '张宝', '男', 55, 85, 45 );
INSERT INTO student ( id, NAME, gender, chinese, english, math )
VALUES
	( 7, '黄蓉', '女', 75, 65, 30 );
INSERT INTO student ( id, NAME, gender, chinese, english, math )
VALUES
	( 7, '黄蓉', '女', 75, 65, 30 );
SELECT
	* 
FROM
	student;
SELECT NAME
	,
	english 
FROM
	student;
SELECT DISTINCT
	* 
FROM
	student;
SELECT NAME
	,
	chinese + english + math '总分' 
FROM
	student;
SELECT NAME
	,
	chinese + english + math + 10 '总分+特长分' 
FROM
	student;
SELECT
	chinese '语文',
	english '英语',
	math '数学' 
FROM
	student;
SELECT NAME
	,
	chinese + english + math '总分' 
FROM
	student 
HAVING
	总分 > 200;
SELECT NAME
	,
	english 
FROM
	student 
WHERE
	english BETWEEN 80 
	AND 90;
SELECT NAME
	,
	english 
FROM
	student 
WHERE
	english NOT BETWEEN 80 
	AND 90;
SELECT
	* 
FROM
	student 
WHERE
	math IN ( 89, 90, 91 );
SELECT
	* 
FROM
	student 
WHERE
	math NOT IN ( 89, 90, 91 );
SELECT NAME
	,
	english 
FROM
	student 
WHERE
	NAME LIKE '李%';
SELECT
	* 
FROM
	student 
WHERE
	math = 80 
	AND chinese = 80;
SELECT
	* 
FROM
	student 
WHERE
	NAME LIKE '李%' 
ORDER BY
	( chinese + math + english ) DESC;
SELECT
	gender,
	count(*) '总数' 
FROM
	student 
GROUP BY
	gender 
HAVING
	总数 > 3 
ORDER BY
	总数 DESC;
CREATE TABLE emp (
	empno INT,-- 员工的编号
	ename VARCHAR ( 50 ),-- 员工的名字
	job VARCHAR ( 50 ),-- 工作名字
	mgr INT,-- 上级领导编号
	hiredate DATE,-- 入职日期
	sal INT,-- 薪资
	comm INT,-- 奖金
	deptno INT -- 部门编号
	
);
INSERT INTO emp
VALUES
	( 7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20 ),
	( 7499, 'ALEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30 ),
	( 7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30 ),
	( 7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20 ),
	( 7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30 ),
	( 7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30 ),
	( 7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10 ),
	( 7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20 ),
	( 7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10 ),
	( 7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30 ),
	( 7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, NULL, 20 ),
	( 7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30 ),
	( 7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20 ),
	( 7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10 );
SELECT
	* 
FROM
	emp 
WHERE
	deptno != 10 
ORDER BY
	empno ASC;#查询姓名第二个字母不是“A”且薪水大于1000元的员工信息,按年薪降序排列
#年薪:12 * 月薪 + 奖金
#ifnull(comm,0) 如果comm的值为null,则当作0,不为null,则还是原来的值
SELECT
	* 
FROM
	emp 
WHERE
	ename NOT LIKE '_A%' 
	AND sal > 1000 
ORDER BY
	(
	12 * sal + IFNULL( comm, 0 )) DESC;
	
	#求每个部门的平均薪水
	SELECT deptno,AVG(sal) FROM emp GROUP BY deptno;
	#	求各个部门的最高薪水
	SELECT deptno, MAX(sal) '最高薪水' FROM emp GROUP BY deptno;
	#求每个部门的最高薪水
	SELECT deptno,job, MAX(sal) FROM emp GROUP BY deptno,job;
	 
	

代码可以直接复制

如果有啥问题可以问我看到一定会回复大家,如果大家喜欢可以作者点赞和关注

大家的支持是我创作下去的最大动力!

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值