-- 创建数据库
-- CREATE DATABASE lottery;
-- 如果数据库不存在,创建数据库
-- CREATE DATABASE IF NOT EXISTS lottery;
-- 选中数据库
-- USE lottery;
-- 查看选中的数据库
-- SELECT DATABASE();
-- 左侧右键数据库-》编辑数据库 可以编辑数据库,字符集默认选择utf8mb4,排序规则默认选择utf8mb4_0900_ai_ci,其中utf8mb4代表字符集,0900代表规则版本 ,ai表示排序时忽略重音 ,ci表示排序时忽略大小写 。与之相对的是不忽略重音和大小写的as和cs
-- 除了右键编辑外,还可以用语句设置
-- 创建数据库并设置字符集和排序规则
-- CREATE DATABASE IF NOT EXISTS lottery CHARACTER SET uft8mb4 COLLATE utf8mb4_0900_ai_ci;
-- 修改数据库字符集和排序规则
-- ALTER DATABASE lottery CHARACTER SET uft8mb4 COLLATE utf8mb4_0900_ai_ci;
-- ALTER DATABASE lottery CHARACTER SET uft8mb4;
-- ALTER DATABASE lottery COLLATE utf8mb4_0900_ai_ci;
-- 删除数据库
-- DROP DATABASE lottery;
-- 创建表
-- CREATE TABLE IF NOT EXISTS prize (id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(255) NOT NULL UNION,prize_num INT);
-- 查看表结构
-- DESC prize;
-- 查看创建表的sql语句
-- SHOW CREATE TABLE prize;
-- 查看内容如下
-- CREATE TABLE `prize` (
-- `id` int NOT NULL AUTO_INCREMENT,
-- `title` varchar(255) DEFAULT NULL,
-- PRIMARY KEY (`id`)
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
-- 插入数据
-- INSERT INTO prize (title) VALUES ('一等奖');
-- 查询数据
-- SELECT * FROM prize;
-- 根据已有的表prize创建一个结构一样的表prize_1 ,被创建的表的结构和like的表的结构相同,但不会复制数据
-- CREATE TABLE IF NOT EXISTS prize_1 LIKE prize;
-- 根据已有的表prize创建新表prize_2 , prize_2的内容会复制prize的数据,但不会复制prize的表结构,AS可以省略
-- CREATE TABLE IF NOT EXISTS prize_2 AS SELECT * FROM prize;
-- 完全复制一个表的结构和内容 需要下面两步
-- CREATE TABLE IF NOT EXISTS prize_4 LIKE prize;
-- INSERT INTO prize_4 SELECT * FROM prize;
-- SHOW CREATE TABLE prize_4;
-- CREATE TABLE `prize_4` (
-- `id` int NOT NULL AUTO_INCREMENT,
-- `title` varchar(255) DEFAULT NULL,
-- PRIMARY KEY (`id`)
-- ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
-- 修改表名
-- ALTER TABLE prize_4 RENAME TO prize_bk;
-- 清空表内容 保留表结构
-- DELETE FROM prize_1;
-- 移除表
-- DROP TABLE prize_1;
-- 向表中插入数据
-- CREATE TABLE IF NOT EXISTS prize_5 LIKE prize;
-- INSERT INTO prize_5 (title) VALUES ('张三');
-- INSERT INTO prize_5 (title) VALUES ('zhangsan');
-- 查看表中所有的数据
-- SELECT * FROM prize_5;
-- 更改数据 会更改整个表的title
-- UPDATE prize_5 SET title = 'wangwu';
-- 根据条件更改符合条件的数据
-- UPDATE prize_5 SET title = '王五' WHERE id = 1;
-- UPDATE prize_5 SET title = '张三' WHERE title = 'wangwu';
-- 给数据表增加一列新字段 其中COLUMN可以省略
-- ALTER TABLE prize_5 ADD COLUMN age INT;
-- ALTER TABLE prize_5
-- ADD COLUMN mobile VARCHAR(11),
-- ADD COLUMN sex VARCHAR(1);
-- 修改数据表的列数据类型
-- ALTER TABLE prize_5 MODIFY COLUMN mobile VARCHAR(11) UNIQUE,MODIFY sex VARCHAR(10);
-- 删除表的列
-- ALTER TABLE prize_5 DROP sex;
-- 添加创建时间 并且插入数据时默认插入当前时间
-- ALTER TABLE prize_5 ADD COLUMN create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
-- 添加更新时间 并且在更新数据时自动更新时间
-- ALTER TABLE prize_5 ADD COLUMN update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
-- 一次更新多个字段
-- UPDATE prize_5 SET title = '李四',age = 18 WHERE title = '张三';
-- 查询表中指定字段的数据
-- SELECT title, mobile FROM prize_5;
-- SELECT title FROM prize_5 WHERE age>=18;
-- SELECT title FROM prize_5 WHERE age<18&& mobile =='11111';
-- &&符号也可以换成AND 同理 ||符号与or一样
-- SELECT title FROM prize_5 WHERE age<18 AND mobile =='11111';
-- 查询age>=18 <=20的数据
-- SELECT title FROM prize_5 WHERE age>=18 AND age <=20;
-- SELECT title FROM prize_5 WHERE age BETWEEN 18 AND 20;
-- 查询age为18、19、20的数据
-- SELECT title FROM prize_5 WHERE age = 18 || age=19||age=20;
-- SELECT title FROM prize_5 WHERE age IN (18,19,20);
-- 查询age 为NULL的数据
-- SELECT title FROM prize_5 WHERE age IS NULL;
-- 模糊查询
-- %表示匹配任意个任意字符
-- _表示匹配任意一个字符
-- SELECT title FROM prize_5 WHERE title LIKE '%w%';
-- SELECT title FROM prize_5 WHERE title LIKE '%_w';
-- 分页查询
-- SELECT * FROM prize_5 LIMIT 10 OFFSET 0;
-- SELECT * FROM prize_5 LIMIT 10 OFFSET 10;
-- SELECT * FROM prize_5 LIMIT 10 OFFSET 20;
-- 升序排列
-- SELECT * FROM prize_5 ORDER BY age ASC;
-- 降序排列
-- SELECT * FROM prize_5 ORDER BY age DESC;
-- 排序依据有重复时,指定多个排序依据
-- SELECT * FROM prize_5 ORDER BY age DESC,mobile ASC;
-- 查询age最大值 、最小值 、平均值、age的和、age的个数、去重后age的个数、同时查询前面的需求
-- SELECT MAX(age) FROM prize_5;
-- SELECT MIN(age) FROM prize_5;
-- SELECT AVG(age) FROM prize_5;
-- SELECT SUM(age) FROM prize_5;
-- SELECT COUNT(age) FROM prize_5;
-- SELECT COUNT(DISTINCT age) FROM prize_5;
-- SELECT MAX(age),MIN(age),AVG(age),SUM(age), COUNT(age),COUNT(DISTINCT age) FROM prize_5;
-- 分组查询age最大值 、最小值 、平均值、age的和、age的个数、去重后age的个数、同时查询前面的需求
-- SELECT sex, MAX(age) FROM prize_5 GROUP BY sex;
-- SELECT MIN(age) FROM prize_5;
-- SELECT AVG(age) FROM prize_5;
-- SELECT SUM(age) FROM prize_5;
-- SELECT COUNT(age) FROM prize_5;
-- SELECT COUNT(DISTINCT age) FROM prize_5;
-- SELECT sex, MAX(age),MIN(age),AVG(age),SUM(age), COUNT(age),COUNT(DISTINCT age) FROM prize_5 GROUP BY sex;
-- 联合查询,sql join
-- 新建一个关联表,添加外键
-- CREATE TABLE IF NOT EXISTS prize_record (id INT PRIMARY KEY AUTO_INCREMENT,prize_name VARCHAR(255) UNIQUE NOT NULL);
-- ALTER TABLE prize_record ADD COLUMN user_id INT;
-- ALTER TABLE prize_record ADD CONSTRAINT user_id FOREIGN KEY (user_id) REFERENCES prize_5(id);
-- 修改外键
-- ALTER TABLE prize_record DROP FOREIGN KEY user_id;
-- ALTER TABLE prize_record ADD CONSTRAINT user_id FOREIGN KEY (user_id) REFERENCES prize_5(id);
-- INSERT INTO prize_record (prize_name) VALUES ('钢笔');
-- INSERT INTO prize_5 (title,age ,mobile,sex) VALUES ('晓',18,'13712345678','男');
-- 内连接 inner join 交集
-- SELECT * FROM prize_5 INNER JOIN prize_record ON prize_5.id =prize_record.user_id;
-- 左连接 left join 左边全部和左右相交部分 的数据
-- SELECT * FROM prize_5 LEFT JOIN prize_record ON prize_5.id =prize_record.user_id;
-- 右连接 right join 右边全部和左右相交部分 的数据
-- SELECT * FROM prize_5 RIGHT JOIN prize_record ON prize_5.id =prize_record.user_id;
-- 条件左连接 left join 左边全部减去左右相交部分 的数据
-- SELECT * FROM prize_5 LEFT JOIN prize_record ON prize_5.id =prize_record.user_id WHERE prize_record.user_id IS NULL;
-- 条件右连接 right join 右边全部减去左右相交部分 的数据
-- SELECT * FROM prize_5 RIGHT JOIN prize_record ON prize_5.id =prize_record.user_id WHERE prize_5.id IS NULL;
-- 全连接 full join
-- SELECT * FROM prize_5 LEFT JOIN prize_record ON prize_5.id =prize_record.user_id
-- UNION
-- SELECT * FROM prize_5 RIGHT JOIN prize_record ON prize_5.id =prize_record.user_id;
-- 全连接 full join 去除相交部分
-- SELECT * FROM prize_5 LEFT JOIN prize_record ON prize_5.id =prize_record.user_id WHERE prize_record.user_id IS NULL
-- UNION
-- SELECT * FROM prize_5 RIGHT JOIN prize_record ON prize_5.id =prize_record.user_id WHERE prize_5.id IS NULL;