use test;
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `employee_tbl`
-- ----------------------------
-- DROP TABLE IF EXISTS `employee_tbl`;
CREATE TABLE `employee_tbl` (
`id` int(11) NOT NULL,
`name` char(10) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
`singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `employee_tbl`
-- ----------------------------
BEGIN;
INSERT INTO `employee_tbl` VALUES ('1', '小明', '2016-04-22 15:25:33', '1'), ('2', '小王', '2016-04-20 15:25:47', '3'), ('3', '小丽', '2016-04-19 15:26:02', '2'), ('4', '小王', '2016-04-07 15:26:14', '4'), ('5', '小明', '2016-04-11 15:26:40', '4'), ('6', '小明', '2016-04-04 15:26:54', '2');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
SELECT DISTINCT concat
(id,',',name) FROM employee_tbl GROUP BY id,name;
SELECT DISTINCT concat
(name) FROM employee_tbl GROUP BY name;
SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
SELECT
CONCAT( COLUMN_NAME, ',' )
FROM
information_schema.COLUMNS
WHERE
table_name = 'employee_tbl'
AND table_schema = 'test';
SELECT CASE
WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 0
AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 17 THEN '其他'
WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 18
AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 39 THEN '18-39岁'
WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 40
AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 59 THEN '40-59岁'
WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 60
AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 74 THEN '60-74岁'
WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 75
AND TIMESTAMPDIFF(YEAR, birthday, CURDATE()) <= 89 THEN '75-89岁'
WHEN TIMESTAMPDIFF(YEAR, birthday, CURDATE()) >= 90 THEN '90岁以上'
END AS type, count(1) AS number
FROM USER u WHERE u.tenant_id in(1,2)
GROUP BY type;
SELECT name from employee_tbl WHERE singin>3 and id=4;
SELECT name from employee_tbl WHERE singin>=3 and singin<5;
SELECT name from employee_tbl WHERE singin in (1,2);
SELECT name from employee_tbl WHERE singin NOT in (1,2);
select * from employee_tbl ORDER BY singin desc , name asc;
SELECT sum(singin) FROM employee_tbl;
SELECT MAX(DISTINCT singin) FROM employee_tbl;
SELECT min(DISTINCT singin) FROM employee_tbl;
SELECT avg(singin) FROM employee_tbl;
SELECT LENGTH(name) as username FROM employee_tbl;
select SUBSTR("sdafff" FROM 2 FOR 3);
SELECT ROUND(-1.2);
SELECT mod(10,-3);
SELECT 10%3;
select CONCAT(curdate()," ", curtime()) as datetime;
SELECT DATE_FORMAT(date,'%Y年%m月%d日') datetime FROM employee_tbl;
SELECT if(10<5,'da','xiao');
SELECT COUNT(singin) FROM employee_tbl;
SELECT COUNT(DISTINCT singin) FROM employee_tbl;
select MAX(singin)-MIN(singin) as number FROM employee_tbl;
select MAX(singin),id FROM employee_tbl GROUP BY id;
SELECT COUNT(*), shen_id FROM employee_tbl GROUP BY shen_id HAVING shen_id IS NOT null;
SELECT COUNT(*) FROM shen GROUP BY LENGTH(name);
select MAX(singin),AVG(singin),SUM(singin) FROM employee_tbl GROUP BY id ORDER BY id;
SELECT NAME
FROM
employee_tbl shen;
-- 内连接
SELECT e.id, e.name, e.date, e.singin, s.id, s.name as a FROM employee_tbl as e INNER JOIN shen as s on e.shen_id=s.id ;
-- 左连接
SELECT e.id, e.name, e.date, e.singin, s.id, s.name as a FROM employee_tbl as e LEFT JOIN shen as s on e.shen_id=s.id ;
SELECT e.id, e.name, e.date, e.singin, s.id, s.name as a FROM employee_tbl as e LEFT JOIN shen as s on e.shen_id=s.id WHERE s.id is NULL ;
-- 右连接
SELECT e.id, e.name, e.date, e.singin, s.id, s.name as a FROM employee_tbl as e RIGHT JOIN shen as s on e.shen_id=s.id ;
-- 交叉连接
SELECT e.*,s.* FROM
employee_tbl e cross JOIN shen s;
-- 子查询
SELECT * from employee_tbl WHERE shen_id in (SELECT id FROM shen WHERE name="影");
select e.id,e.name, sh.id,sh.name from employee_tbl as e left join (select id,name from shen) as sh on e.shen_id=sh.id;
-- 仅仅复制表的结构
create table copy like employee_tbl;
-- 复制表的结构和数据
create table copy2
select * from employee_tbl;
select * from copy2;
use test
-- 添加外键
ALTER TABLE copy ADD foreign key(shen_id) references shen(id) ;
ALTER TABLE copy drop foreign key shen_id ;
use test
-- 开启事务 先禁用自带提交功能
set autocommit=0;
start transaction;
INSERT INTO copy (id,name,date,singin,shen_id)VALUES(4, '34', '2021-09-28 16:30:03', 02, 12);
-- 回滚
ROLLBACK;
-- 提交
COMMIT;
-- 查看事务隔离级别
SELECT @@tx_isolation;
-- 查询全局事务隔离级别
SELECT @@global.tx_isolation;
-- 查询会话事务隔离级别
SELECT @@session.tx_isolation;
-- 设置read uncommitted级别:
set session transaction isolation level read uncommitted;
-- 设置read committed级别:
set session transaction isolation level read committed;
-- 设置repeatable read级别:
set session transaction isolation level repeatable read;
-- 设置serializable级别:
set session transaction isolation level serializable;
-- savepoint a 保存点,设置节点
-- rollback to a 回滚到保存点
-- 视图 sql 逻辑
select e.id,e.name,e.date,s.id as d,s.name,s.sex FROM employee_tbl as e INNER JOIN shen as s ON e.shen_id=s.id;
-- 创建视图就是保存查询sql逻辑
create VIEW v1
as
select e.id,e.name,e.date,s.id as d,s.name as n,s.sex FROM employee_tbl as e INNER JOIN shen as s ON e.shen_id=s.id;
-- 查询视图
SELECT * FROM v1;
-- 视图更新
-- 方式一 create or replace view 视图名 as 查询语句
create OR replace view v1 as SELECT id, name, date FROM employee_tbl;
SELECT * FROM v1;
-- 方式二 alter view 视图名 as 查询语句
alter view v1 as SELECT id, name, date FROM employee_tbl;
-- 删除是视图名 drop view 视图名,视图名。。。
drop view v1;
-- 查看视图
show CREATE view v1;
desc v1;
-- 系统变量:全局变量、会话变量
-- 自定义变量: 用户变量、局部变量
SHOW global VARIABLES;
show session variables;
show global VARIABLES like '%char%';
-- 查看指定的某个系统变量的值 select @@global | session .系统变量
-- 为某个系统变量赋值 set @@global | session .系统变量名=值
select @@tx_isolation;
-- 用户变量等于会话变量 声明病初始化 = 或 :=
-- set @用户变量名=值; select @用户变量名:=值或;
set @name='john';
-- 赋值(更新用户变量的值)
-- 方式一 通过set或select
-- 方式二 通过 select 字段 into 变量名 from 表;
-- 查看变量名 select @name;
select @john;
-- 局部变量
-- 作用域:仅仅定义在他的begin end中有效
-- DECLARE 变量名 类型 default 值
-- DECLARE 变量名 类型
-- 存储过程和函数 1、提高代码的重用性 2、简化操作 存储过程即函数
-- 存储过程 一组预先编译好的sql语句的集合,理解成批处理语句
-- 1、提高代码重用性 2、简化代码操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
-- 1、创建语法
-- create PROCEDURE 存储过程名(参数列表)方法体
BEGIN
-- 存储过程体(一组合法的sql语句)
END
-- 参数模式
-- IN:该参数可以作为输入,也就是说该参数需要调用方传入值
-- OUT:该参数可以作为输出,也就是说该参数可以作为返回值
-- INOUT:该参数既可以作为输入又可以作为输出
-- 如果存储过程只有一句话,BEGIN END 可以省略
in name VARCHAR(20)
-- delimiter 接收标记
delimiter $
-- 2、调用语法
-- CALL 存储过程名(实参列表)
delimiter $
create PROCEDURE myv1()
BEGIN
INSERT INTO test_1(name)VALUES("温迪"),("钟离"),("影");
END $
-- 调用
CALL myv1;
-- 测试in
delimiter $
CREATE PROCEDURE myv2(in names VARCHAR(255))
BEGIN
select * FROM test_1 WHERE name=names;
END $
CALL myv2("影")$;
delimiter $
CREATE PROCEDURE myv6(in names VARCHAR(255))
BEGIN
-- 声明并初始化
DECLARE id int ;
DECLARE result VARCHAR(255) DEFAULT ' ';
select * FROM test_1 WHERE name=names;
SELECT id,result;
END $
CALL myv5("影")$;
-- 测试out
delimiter $
create procedure myv9(in id int(11),out name VARCHAR(255))
BEGIN
SELECT name into name FROM test_1
where id=id;
END $
set @bName$
CALL myv9(2,@d)
select @d;
-- 删除存储过程
DROP PROCEDURE myv1;
DROP PROCEDURE myv8;
-- 查看存储过程
SHOW CREATE PROCEDURE myv3;
-- 函数 区别:有且仅有一个返回
create FUNCTION myv11() RETURNs INT(11)
BEGIN
DECLARE count INT(11) DEFAULT 0;
SELECT count(*) INTO count FROM test_1;
return count;
END
SELECT myv11()$