基础SQL语句

资料库:储存资料的地方,一本书,一个电脑,人的脑袋

存储大量的资料,搜索速度要快

SQL   Structured Query Language   是一种跟关联式资料库管理系统RDBMS(Relational Database Management System)进行沟通的语言

关联式资料库是如何储存资料的?     将资料储存成一个一个表格tables   

设置成主键primary key的那个属性可以唯一的表示区分该资料,可以根据主键进行查询资料

在一个表格中primary key可以不是唯一存在的,有些表格数据需要通过多个primary key来唯一表示

使表格与表格产生关联----------->设置外键foreign key 可以使本表格对应其他表格的primary key(也可以使本表格内部产生关联)

可以同时把primary key 和foreign key  设置为一样的

创建表格

mysql的关键字是蓝色的,我们一般使用大写字母进行区分

表格的名称我们使用反引号引起来(避免与关键字冲突)     反引号在数字1的右边,esc的下面,使用shift进行切换

mysql的数值类型

INT    ------整数

decimal(m,n)     -------有小数点的数,m是总共有几位数,n表示小数点后面有几位

varchar(n)   ---------字串      最多可以存放n个字节以内

blob             ---------(Binary Large Object)图片、影片、档案-----------存放二进制资料

date             ---------YYYY-MM-DD日期

timestamp    --------YYYY-MM-DD  HH:MM:SS   记录时间

# 创建资料库
CREATE DATABASE `sql_tutorial`;
SHOW DATABASES;
use `sql_tutorial`;
# 创建表格
create table `student`(
	`student_id` int primary key,
    `name` varchar(20),
    `major`varchar(20)
);
# 删除表格
drop table `student`;
# 改动表格----添加属性
alter table `student` add `gpa` decimal(3,2);
# 改动表格----删除属性
alter table `student` drop `gpa`;
describe  `student`;
# 提取数据,*表示全部数据
select * from `student`;
# 插入数据在表格中,按照创建表格中属性的顺序
insert into `student` values(3,'小红','物理');
# 插入数据在表格中,自定义属性的顺序,没有某个属性,则该属性表现为空NULL	
insert into `student` (`major`,`student_id`) values('数学',4);
/*constraints 限制约束   可以在创建表格属性时,对其进行约束   
约束的分类
在 MySQL 中,主要有下面几种约束:
1、NOT NULL:非空约束,用于约束该字段的值不能为空。比如姓名、学号等。
2、DEFAULT:默认值约束,用于约束该字段有默认值,约束当数据表中某个字段不输入值时,自动为其添加一个已经设置好的值。比如性别。
3、PRIMARY KEY:主键约束,用于约束该字段的值具有唯一性,至多有一个,可以没有,并且非空。比如学号、员工编号等。
4、UNIQUE:唯一约束,用于约束该字段的值具有唯一性,可以有多个,可以没有,可以为空。比如座位号。
5、CHECK:检查约束,用来检查数据表中,字段值是否有效。比如年龄、性别。
6、FOREIGN KEY:外键约束,外键约束经常和主键约束一起使用,用来确保数据的一致性,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号。
7、auto_increment:自动更正,一般常用于整数
原文链接:https://blog.csdn.net/z_johnny/article/details/113820405*/
# 创建一个带约束的表格
create table `experiment`(
	`experiment_id`  int  auto_increment primary key,
    `experiment_time`  date unique,
    `experiment_operator` varchar(20) default"小冯",
    `experiment_result` varchar(20)
);
drop table `experiment`;
insert into `experiment`values(1,'2024-3-11',"小王","成功");
insert into `experiment`(`experiment_time`,`experiment_result`)values('2023-3-12',"失败");
insert into `experiment`(`experiment_time`,`experiment_result`)values('2023-3-13',"失败");
select * from `experiment`;





创建公司资料表格 

-- 创建公司资料表格

# 员工
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
    # 这里的  on delete set null 表示 如果 某员工离职即员工Id被删除 后 将manager_id置为null
);

# 客户
create table `client`(
	`client_id` int primary key,
    `client_name` varchar(20) ,
    `phone` varchar(20)
);
# 员工-客户对应表
create table `works_with`(
	`emp_id` int primary key,
    `client_id` int ,
    `total_sales` int,
    foreign key(`emp_id`) references `employee`(emp_id) on delete cascade, 
    # 这里的on delete cascade 表示员工的 emp_id 被删掉后,对应工作表格中emp_id也一起删掉
    foreign key(`client_id`) references `client`(client_id) on delete cascade
);
# branch_id与sup_id均为foreign key 但是在创建表格时无法直接设置,所以需要改动表格进行设置
-- 改动表格
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;

新增公司资料

-- 新增公司资料
-- 注意新增资料的关联关系,最好先新增没有关联关系的资料
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-09-16','M',29000,2,null);
insert into `employee`values(208,'小黑','2000-12-19','M',35000,3,null);
insert into `employee`values(209,'小白','1997-01-22','F',39000,3,null);
insert into `employee`values(210,'小兰','1925-11-10','F',84000,1,null);
# 修改branch里manager_id
update `branch`
set `manager_id` = 208
where `branch_id` = 3;
update `employee`
set `sup_id` = 207
where `name` in ('小白','小兰');
-- 新增客户资料
insert into `client` values(404,'艾瑞克','678012456778');
-- 新增员工与客户资料
insert into `works_with`values(209,402,24040);

select * from `employee`;
select * from `client`;
select * from `branch`;
select * from `works_with`;

取得客户资料

-- 取得客户资料
-- 1.取得所有员工资料
select * from `employee`;
-- 2.取得所有客户资料
select * from `client`;
-- 3.按薪水的高低取得员工资料
select * from `employee` order by `salary`;
-- 4.取得薪水前三高的员工
select * 
from `employee` 
order by `salary` desc
limit 3;
-- 5.取得所有员工的名字
select `name` from `employee`;
-- 6.取得所有所愿的性别,避免重复
select distinct `sex` from `employee`;

使用聚合函数

-- 使用聚合函数
 -- 1.取得员工个数 
	select count(*) from `employee`;
 -- 2.取得所有出生与1970-01-01之后的女性员工人数
	select count(*)
    from `employee`
    where `sex` = 'F' and `birth_date`>'1970-01-01';
 -- 3.取得所有员工的平均薪水
	select avg(`salary`) from `employee`;
 -- 4.取得所有员工薪水的总和
	select sum(`salary`) from `employee`;
 -- 5. 取得员工的最高薪水
	select max(`salary`) from `employee`;
 -- 6.取得 员工的最低薪水
	select min(`salary`) from `employee`;

使用万用字节

-- %代表多个字节,_代表一个字节 
-- 1.取得电话号码尾数是335的客户 
select * 
from `client` 
where `phone` like '%335';
-- 2.取得姓艾的客户
select *
from `client`
where `client_name`like '艾%';
-- 3.取得生日在12月的员工
select *
from `employee`
where `birth_date` like '%-09-%';

使用union

-- union 联集   将搜寻到的结果合并在一起   竖着合并的   合并的属性个数应该相同,且类型也要相同
-- 1. 员工名字和客户名字   或者id和名字
select `name`,`emp_id` from `employee`
union
select `client_name`,`client_id`from `client`;
-- 在这里可以更改合并后的属性名称
select `name` as `total_name`,`emp_id` as `total_id`
from `employee`
union
select `client_name`,`client_id`from `client`;
-- 2.员工薪水和销售的金额
select `salary` as `total_money` from `employee`
union
select `total_sales` from `works_with`;-- union 联集   将搜寻到的结果合并在一起   竖着合并的   合并的属性个数应该相同,且类型也要相同
-- 1. 员工名字和客户名字   或者id和名字
select `name`,`emp_id` from `employee`
union
select `client_name`,`client_id`from `client`;
-- 在这里可以更改合并后的属性名称
select `name` as `total_name`,`emp_id` as `total_id`
from `employee`
union
select `client_name`,`client_id`from `client`;
-- 2.员工薪水和销售的金额
select `salary` as `total_money` from `employee`
union
select `total_sales` from `works_with`;

使用join

-- join 可以把两个表格的资料连在一起
-- 在branch中新增一个资料,是为了便于下面join的演示
insert into `branch` values(4,'偷懒',null);
-- 取得所有部门经理的名字 
select * 
from `employee`
join `branch`
on `emp_id` = `manager_id`;

select `emp_id`,`name`,`branch_name` 
from `employee`
join `branch`
on `employee`.`emp_id` = `branch`.`manager_id`;

-- 不管条件是否成立,左边的表格都要回传
select `emp_id`,`name`,`branch_name` 
from `employee`
left join `branch`
on `employee`.`emp_id` = `branch`.`manager_id`;

-- 不管条件是否成立,右边的表格都要回传
select `emp_id`,`name`,`branch_name` 
from `employee`
right join `branch`
on `employee`.`emp_id` = `branch`.`manager_id`;




子查询 subquery

-- subquery   子查询 在一个搜寻语句中再写一个搜寻语句
-- 1.找出研发部门的经理名字 
select `name` 
from `employee`
where `emp_id` = (
	select `manager_id` 
	from `branch`
	where `branch_name` = '研发'
);    # 这里括号中是另一个搜索语句,也就是子查询 subquery

-- 2.找出一位客户的销售金额超过50000的员工名字 

select `name` 
from `employee`
where `emp_id` in  (
	select `emp_id` 
	from `works_with`
	where `total_sales`>50000
);   # 请注意当你使用等号时,应该是一行数据,当是多行数据时,请使用in 




 删除

-- 删除  on delete
delete from `employee`
where `emp_id` = 207;
select *  from `branch`;

select *  from `works_with`;

用python连接 mysql  未学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值