SQL笔记

创建资料库

SET SQL_SAFE_UPDATES = 0;

CREATE DATABASE `wode`;
# SHOW DATABASES;
# DROP DATABASE `wode`;
USE `wode`;

DROP TABLE `student`;
CREATE TABLE `student`(
    `student_id` INT PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(20) NOT NULL,
    `major` VARCHAR(20) , # UNIQUE
    `score` INT
);
DESCRIBE `student`;


# ALTER TABLE `student` ADD gpa DECIMAL(3,2);
# ALTER TABLE `student` DROP COLUMN gpa;

SELECT * FROM `student`;

# 增
INSERT INTO `student` VALUES(1,'小白','历史',30);
INSERT INTO `student` VALUES(2,'小黑','历史',34);
INSERT INTO `student` VALUES(3,'小绿',NULL,25);
INSERT INTO `student`(`name`,`major`,`score`) VALUES('小白','英语',45);
INSERT INTO `student`(`name`,`major`,`score`) VALUES('小绿','英语',23);

# 改
SELECT * FROM `student`;
UPDATE `student`
SET `major` = '英语文学', `score` = 23 
WHERE `major` = '英语文学';
# 删
DELETE FROM `student`
WHERE `student_id` = 4;
DELETE FROM `student`
WHERE `score`<=23;

# 取得资料select
SELECT `name`,`major` FROM `student`;
SELECT * FROM `student` 
ORDER BY `score` DESC;
SELECT * FROM `student` 
ORDER BY `score`,`student_id`;
SELECT * FROM `student` LIMIT 2;  # limit限制回传数目
SELECT * FROM `student`
WHERE `major` IN('历史','英语文学');

创建简单公司资料

# 创建简单公司资料库,两张表
CREATE TABLE `employee`(
   `emp_id` INT PRIMARY KEY,
   `name` VARCHAR(20),
   `birth_date` DATE,
   `sex` VARCHAR(1),
   `salary` INT,
   `branch_id` INT,
   `sup_id` INT
);
CREATE TABLE `branch`(
  `branch_id` INT PRIMARY KEY,
  `branch_name` VARCHAR(20),
  `manager_id` INT,
  FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL
);

# ALTER TABLE `employee` RENAME COLUMN `brach_id` TO `branch_id`;

DESCRIBE  `employee`;
DESCRIBE `branch`;

ALTER TABLE `employee`
ADD FOREIGN KEY(`branch_id`)
REFERENCES `branch`(`branch_id`)
ON DELETE SET NULL;  

ALTER TABLE `employee`
ADD FOREIGN KEY(`sup_id`)
REFERENCES `employee`(`emp_id`)
ON DELETE SET NULL;

# 新增资料,先将branch_id中对应外键写为NULL
INSERT INTO `branch` VALUES(1,'研发',NULL);
INSERT INTO `branch` VALUES(2,'行政',NULL);
INSERT INTO `branch` VALUES(3,'咨询',NULL);

INSERT INTO `employee` VALUES(206,'小黄','1998-10-08','F',50000,1,NULL);
INSERT INTO `employee` VALUES(207,'小缘','1985-10-08','M',29000,2,206);
INSERT INTO `employee` VALUES(208,'小黑','2000-10-08','M',35000,3,206);
INSERT INTO `employee` VALUES(209,'小白','1997-10-08','F',39000,3,207);
INSERT INTO `employee` VALUES(210,'小兰','1925-10-08','F',84000,1,207);

SELECT * FROM `branch`;
SELECT * FROM `employee`;

UPDATE `branch`
SET `manager_id` = 206 WHERE `branch_id` = 1;
UPDATE `branch`
SET `manager_id` = 207 WHERE `branch_id` = 2;
UPDATE `branch`
SET `manager_id` = 208 WHERE `branch_id` = 3;

# 取得公司资料
SELECT * FROM `employee` ORDER BY `salary`DESC LIMIT 3;
SELECT DISTINCT `sex` FROM `employee`;  # 去重复

其他

# 聚合函数
SELECT COUNT(*) FROM `employee`;
SELECT COUNT(`sup_id`) FROM `employee`; # 去NULL后数量
SELECT COUNT(*)FROM `employee` 
WHERE `birth_date`>'1990-07-01' AND `sex` = 'F';
SELECT AVG(`salary`) FROM `employee`; # 平均数
# SUM() MAX() MIN()

# 万用字元
# LIKE 可用%代表多个字元,用一个_代表一个字元

# union 合并,合并属性类型要一样,可以多对多,对应数目要相同
SELECT `name` FROM `employee`
UNION
SELECT `branch_name` FROM `branch`;
# SELECT xx  AS xxx

# join 连接
SELECT `employee`.`emp_id`,`employee`.`name`,`branch`.`branch_name`
FROM `employee`
LEFT JOIN `branch`
ON `employee`.`emp_id` = `branch`.`manager_id`;

# subquery 子查询
SELECT `name`
FROM `employee`
WHERE `emp_id` = (
    SELECT `manager_id`
    FROM `branch`
    WHERE `branch_name` = '研发'
);

# on delete 
# on delete set null 对应不到就设置NULL,同时为主键的不能如此用
# on delete cascade 对应不到就删除

与python连接

import mysql.connector

connection = mysql.connector.connect(host='127.0.0.1',
                                     port='3306',
                                     user='root',
                                     password='YBYB24689')
cursor = connection.cursor()

# 创建资料库
# cursor.execute("CREATE DATABASE `qq`;")

#取得所有资料库名称
cursor.execute("SHOW DATABASES;")
records = cursor.fetchall()
for i in records:
    print(i)

#关闭
cursor.close()
connection.commit()
connection.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值