SQL语句的学习(增,删,改,查)详解

SQL 语句的学习

1. 创建数据库 和 创建表

#创建一个数据库 叫 sql_tutorial#
CREATE DATABASE `sql_tutorial`;
#查看当前有哪些数据库#
SHOW DATABASES; 
#查看数据库有哪些表#
USE `sql_tutorial`;  
SHOW TABLES; 
#查看student的表结构#
DESCRIBE `student`;
#关闭自动更新时间#
SET SQL_SAFE_UPDATES = 0;  
#在sql_tutorial 这个库内 创建一张表#

#指定哪个库#
USE `sql_tutorial`;  

#开始创建#
CREATE TABLE `student`(
         `student_id` INT AUTO_INCREMENT,      
		 `name` VARCHAR(20) NOT NULL UNIQUE,       
		 `major` VARCHAR(20) NOT NULL,
         `score` INT NOT NULL, 						 
		  PRIMARY KEY(`student_id`)   ## 将student_id 设置成主键
			
);
#数据库的常用数据类型#
INT           整数
DECIMAL(m,n)  有小数点的数  m就是总共是几位  n就是小数点占几位  2.33 ---> (3,2)
VALUES(n)     字符串     n----最大字符数
BLOB          图片
DATE          YYYY-MM-DD  日期
TIMESTAMP     YYYY-MM-DD HH:MM:SS 记录时间

#创建数据库一般都带有字段的约束 常用约束如下#

PRIMARY KEY       声明这个字段为主键
NOT NULL          规定这个字段不能为空
UNIQUE            规定这个字段不能重复
DEFAULT(123546)   预设值  当我们没有规定的时候  那就自动填123456
AUTO_INCREMENT    设置整数类型的自增

#删除一个数据库#
DROP DATABASE `sql_tutorial`;

#删除一张表#
DROP TABLE `student`;

#删除表的数据 #
TRUNCATE TABLE `student`;    # 直接删除全部数据  先全部删除再创建 推荐
DELETE FROM `student`;       # 直接删除全部数据 一条一条的删  慢
#给 student 表追加 gpa 字段 小数单位#
ALTER TABLE `student` ADD gpa DECIMAL(3,2);

#删除student表的 gpa 字段#
ALTER TABLE `student` DROP COLUMN gpa;  
#表 约束的修改和删除#

#删除student表的 name 字段的 UNIQUE(唯一性)约束
ALTER TABLE `student` DROP INDEX `name`; 

#添加student表的 name 字段的 UNIQUE(唯一性)约束
ALTER TABLE `student` ADD UNIQUE (name); 

2. 表数据的插入

# 插入数据
INSERT INTO `student` VALUES (1,'小白','历史',52);   
INSERT INTO `student` VALUES (2,'小绿','化学',90);
INSERT INTO `student` VALUES (3,'小黄','生物',100);
INSERT INTO `student` VALUES (4,'小黑','化学',20);
INSERT INTO `student` VALUES (5,'小鬼','物理',70);

#指定插入
INSERT INTO `student`(`name`,`major`) VALUES('小11','HASWHAD'); 

3. 表数据的修改

#修改表的数据#
UPDATE `student` 
SET `major` = "数学"       # 替换的
WHERE `major` = "化学";    # 查到的

#也可以根据其他条件去修改#
UPDATE `student` 
SET `major` = "化学"       # 替换的
WHERE `student_id` = "5";    # 查到的

#多条修改 #
UPDATE `student` 
SET `major` = "化学&历史"     
WHERE `major` = "化学" OR `major` = "历史";   

#也可以根据其他条件  例如 id#
UPDATE `student` 
SET `name` ="小红" ,`major` = "政治"       
WHERE `student_id` = "5";

#全量替换 把 major 字段全部替换成 政治
UPDATE `student` 
SET `major` = "政治"       
 

4. 表数据的删除

#常用运算符#
>
<
>=
<=
=
<>  不等于

#删除student_id=5 的全部数据
DELETE FROM `student`
WHERE `student_id` =5;     

5. 表数据的查询

#查询#
SELECT * FROM `student`;
SELECT `name`,`major` from `student`;

#条件查询#
SELECT * FROM `student` WHERE `major` != '历史';  #查询不等于 历史的  或者 <> '历史'  都可
SELECT * FROM `student` WHERE `major` = '数学' AND `name` = '小黑';   #可以使用 AND 或者 OR 进行多条件查询

#排序#
SELECT * FROM `student` ORDER BY `score`;    #ORDER BY 由低到高   默认其实是  ASC
SELECT * FROM `student` ORDER BY `score` DESC;    #ORDER BY  xxx DESC  由高到低

#指定行数显示#
SELECT * FROM `student` LIMIT 2;    #  LIMIT 指定查看前几行
SELECT * FROM `student` ORDER BY `score` LIMIT 2;   # 查看最后两名
SELECT * FROM `student` ORDER BY `score` DESC LIMIT 2;   # 组合使用  查看前2

#in 查询#
SELECT * FROM `student` WHERE `major` IN('数学','历史');  ##就相当于  major = 数学 or major = 历史

6. 实际案例

1. 创建表格
#创建一张员工表格#


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
);

#建立表格   同时将 manager_id 设置成外键  对应 employee 下的emp_id主键#

#ON DELETE SET NULL 这个意思就是  当主键没了给就外键设置一个 NULL#

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`
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;


#创建一张客户表#
CREATE TABLE `client`(
      `client_id` INT PRIMARY KEY,
			`client_name` VARCHAR(20),
			`phone` VARCHAR(20)

);

#创建 works_with #
# ON DELETE CASCADE 就是当对应主键被删除  那么这个外键 就会连带 删除 #

CREATE TABLE `works_with`(
     `emp_id` INT,
		 `client_id` INT,
		 `total_sales` INT,
		 PRIMARY KEY(`emp_id`,`client_id`),
		 FOREIGN KEY(`emp_id`) REFERENCES `employee`(`emp_id`) ON DELETE CASCADE,
		 FOREIGN KEY(`client_id`) REFERENCES `client`(`client_id`) ON DELETE CASCADE
		 

);
2. 相关查询
SELECT * FROM `employee`;
SELECT `name`,`salary` FROM `employee` ORDER BY  `salary` DESC LIMIT 3; 
SELECT DISTINCT `SEX` FROM `employee`;   # DISTINCT 去重



#聚合函数#
SELECT COUNT(*) FROM `employee`;    # count(*)  统计表的行数
SELECT COUNT(`sup_id`) FROM `employee`;  # 查询指定的 行数 (排除NULL)

SELECT * FROM `employee` WHERE `birth_date` > '1970-01-01' AND `sex` = 'F';

# 统计出生在'1970-01-01' 之后的女性人数
SELECT COUNT(*) FROM `employee` WHERE `birth_date` > '1970-01-01' AND `sex` = 'F';  

SELECT AVG(`salary`) FROM `employee`;    # 计算 salary 的平均值

SELECT SUM(`salary`) FROM `employee`;    # 计算 salary 的总和

SELECT MAX(`salary`) FROM `employee`;    # 计算 salary 的最大值

SELECT MIN(`salary`) FROM `employee`;    # 计算 salary 的最小值



# 模糊查询  % 代表多个字元  _ 就代表一个字元

SELECT * FROM `employee`;

SELECT * FROM `client`;

SELECT * FROM `client` WHERE `phone` LIKE '%121';    # % 模糊多个字元

SELECT * FROM `client` WHERE `client_name` LIKE '艾%';  

SELECT * FROM `employee` WHERE `birth_date` LIKE '_____12%';  # 出生年月在 12 月的



#  union  联集
SELECT `name` FROM `employee` UNION SELECT `client_name` FROM `client`; # UNION 就是把查询结果放在一列上展示  两者查询个数要一样 数据类型要一样

SELECT `name` AS `名字` FROM `employee` UNION SELECT `client_name` FROM `client`; # AS 就是在展示的时候取得  别名

# jion  连接

SELECT `emp_id`,`name`,`branch_name`    # 如果字段一样  可以 通过 表.字段 来解释 `employee`.`emp_id` `employee`.`name`
FROM `employee` 
JOIN `branch` 
ON `emp_id` = `manager_id`;  # 条件   如果字段一样  可以 通过 表.字段 来解释   `employee`.`emp_id`=`branch`.`managen_id`


# 左右表格

# LEFT 左表格  就是说无论是否匹配 在LEFT 左边的表格都会完整展示  #
SELECT `emp_id`,`name`,`branch_name`  
FROM `employee` LEFT JOIN `branch` 
ON `emp_id` = `manager_id`;

# RIGHT 右表格  就是说无论是否匹配 在RIGHT 右边的表格都会完整展示  #
SELECT `emp_id`,`name`,`branch_name`  
FROM `employee` RIGHT JOIN `branch` 
ON `emp_id` = `manager_id`;


# 子查询  就是把一组的查询结果  当做另外 一组查询的条件

SELECT `name` 
FROM `employee`
WHERE `emp_id` =(
	 SELECT `manager_id`
	 FROM `branch`
	 WHERE `branch_name` = '研发'

);

SELECT `name`
FROM `employee`
WHERE `emp_id` IN(
    SELECT `emp_id`
		FROM `works_with`
		WHERE `total_sales` > 50000
);


你可能感兴趣的:(sql,数据库,学习)