SQL基础语言

SQL语言

在这里插入图片描述

SQL分类

在这里插入图片描述

在这里插入图片描述

DDL

DDL 操作数据库

在这里插入图片描述

DDL 操作表

在这里插入图片描述
在这里插入图片描述

数据类型

在这里插入图片描述

在这里插入图片描述

案例

在这里插入图片描述

代码实现:
create table student(
	id int,
	name varchar(10),
	gender char(1),
	birthday date,
	score double(5,2),
	email varchar(64),
	tel varchar(15),
	status tinyint
);
删除表

在这里插入图片描述

修改表

在这里插入图片描述

DML

添加数据

在这里插入图片描述

DQL

在这里插入图片描述

-- 查询所有数据
 


INSERT into stu (id,name) values(1,'张三');


-- 给所有列添加数据
INSERT into stu (id,name,sex,birthday,score,email,tel,status) values(1,'张三','男','1999-4-5',25.50,'1050849213@qq.com','19836374963',1);


-- 批量添加数据
INSERT into stu 
values(1,
'李四',
'男',
'1999-4-5',
25.50,
'1050849213@qq.com',
'19836374963',
1),
(1,
'李四',
'男',
'1999-4-5',
25.50,
'1050849213@qq.com',
'19836374963',
1),
(1,
'李四',
'男',
'1999-4-5',
25.50,
'1050849213@qq.com',
'19836374963',
1);


-- 修改数据 UPDATE 表名 SET 列名1 = 值1,列名2 - 值2,...,[WHERE 条件];

-- 将张三的性别改成女
UPDATE stu set sex = '女' where name = '张三';

-- 将张三的生日改为 1999-12-12 分数改为 99.99;

SELECT * from stu;

UPDATE stu set birthday = '1999-12-12',score = '99.9' where name = '张三';

-- 注意:如果uodate语句中没有加where条件语句,则会将表中的所有数据全部修改;

UPDATE stu set sex = '女'


-- 删除
DELETE FROM stu where name = '张三';
DELETE FROM stu;
基础查询

在这里插入图片描述
代码练习:

-- 删除stu表
drop table if exists stu;


-- 创建stu表
CREATE TABLE stu (
 id int, -- 编号
 name varchar(20), -- 姓名
 age int, -- 年龄
 sex varchar(5), -- 性别
 address varchar(100), -- 地址
 math double(5,2), -- 数学成绩
 english double(5,2), -- 英语成绩
 hire_date date -- 入学时间
);

-- 添加数据
INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date) 
VALUES 
(1,'马运',55,'男','杭州',66,78,'1995-09-01'),
(2,'马花疼',45,'女','深圳',98,87,'1998-09-01'),
(3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
(4,'柳白',20,'女','湖南',76,65,'1997-09-05'),
(5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'),
(6,'刘德花',57,'男','香港',99,99,'1998-09-01'),
(7,'张学右',22,'女','香港',99,99,'1998-09-01'),
(8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');

SELECT * from stu;



-- 基础查询===============================

-- 查询name age 两行

SELECT name, age FROM stu;

-- 查询所有列的数据,列名的列表可以使用*代替,不要使用;

SELECT * from stu;


-- 查询地址信息

SELECT address from stu;

-- 去除重复操作;
SELECT distinct address from stu;

-- 查询姓名,数学成绩,英语成绩;
-- 起别名 as ;
-- as 可以省略 但至少空一个空行!!!;

SELECT name as 名字,math as 数学成绩 ,english as 英语成绩 from stu;
条件查询

在这里插入图片描述

代码练习:
-- 条件查询

-- 1.查询年龄大于20岁的学员信息
SELECT * from stu where age > 20;


-- 2.查询年龄大于等于20岁的学员信息

SELECT * from stu where age >= 20;
-- 3.查询年龄大于等于20岁 并且 年龄小于等于 30岁 的学员信息
SELECT * from stu where age >= 20 && where age <=30;

SELECT * from stu where age >= 20 and where age <=30;

SELECT * from stu where age BETWEEN 20 and 30;


-- 4.查询入学日期在’1998-09-01‘ 到 1999-09-01’ 之间的学员信息

SELECT * from stu where hire_date  BETWEEN '1998-09-01'  and '1999-09-0';


-- 5.查询年龄等于18岁的学员信息
SELECT * from stu where age = 18;


-- 6. 查询年龄不等于18岁的学院信息;

SELECT * from stu where age != 18;
SELECT * from stu where age <> 18;


-- 7.查询年龄等于18岁 或者 年龄等于20岁 或者 年龄等于22岁的学员信息

SELECT * from stu where age = 18  or  age = 20 or age = 22;
SELECT * from stu where age in ( 10,20,22);


-- 8. 查询英语成绩等于 null 的学员信息
-- 注意: NULL值的比较不能使用 =  !=。需要使用 is ,is not 。

SELECT * from stu WHERE english is null ;
SELECT * from stu WHERE english is not null ;

 

-- like 模糊查询 _单个任意字符 % 多个任意字符

-- 1. 查询姓马的学员信息
SELECT * FROM stu where name like '马%';


-- 2. 查询第二字是花的学员信息
SELECT * FROM stu where name like '_花%';


-- 3. 查询名字中包含 '德'的学员信息

SELECT * FROM stu where name like '%德%';
排列查询

在这里插入图片描述

代码练习:
-- 排序方式
-- ASC : 升序排列 (默认值)
-- DESC: 降序排列


-- 1.查询学生信息,按照数学成绩降序排列
SELECT * from stu ORDER BY age;

-- 2.查询学生信息,按照数学成绩降序排序
SELECT * from stu order by math desc;

-- 3. 查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列

SELECT * from stu order by math desc ,english asc;
聚合函数

v'v

代码练习:
-- COUNT 统计数量(统计的列名不能为空);
-- MAX ;求最大值;
-- min 求最小值;
-- sum 求和;
-- avg 求平均值;
 
-- 1.统计一个班级一共有多少个学生;
SELECT count(id) FROM stu;

-- 2.查询数学成绩的最高分;
SELECT MAX(math) FROM stu;
-- 3.查询数学成绩的最低分;
SELECT min(math) FROM stu;
-- 4.查询数学成绩的总分;
SELECT sum(math) FROM stu;
-- 5.查询数学成绩的平均分;
SELECT avg(math) FROM stu;
-- 6.查询英语成绩的最低分;
SELECT min(english) FROM stu;
分组查询

在这里插入图片描述

代码练习
-- 分组函数
 select * from stu;
 SELECT 字段列表 FROM 表名[WHERE 分前条件限定] GROUP BY 分組字段名[HAVING 分组后条件过滤]…
 -- 1.查询男同学和女同学各自的数学平均分
SELECT sex,avg(math) FROM stu group by sex;

-- 注意;分组之后,查询的字段为聚合函数和分组字段,查询其他字段毫无意义;
SELECT name,sex,avg(math) FROM stu group by sex;
 -- 2. 査男同学和女同学各自的数学平均分,以及各自人数
SELECT sex,avg(math), COUNT(*) FROM stu group by sex;
 -- 3. 査男同学和女同学各自的数学平均分,以及各自人数,要求:分数低手70分的不参与分組
  SELECT sex,avg(math) , COUNT(*) FROM stu WHERE math >=70  group by sex ;
	
 -- 4.查询男同学和女同学各白的数学平均分,以及各白人数,要求:分数低于70分的不参与分组,分组之后人数大于2
SELECT sex,avg(math) , COUNT(*) FROM stu WHERE math >=70  group by sex HAVING  count(*) > 2;
分页查询

在这里插入图片描述

代码练习
-- 分页查询:

-- SELECT,学段列表 FROM 表名 LIMIT 起始索引,査論条目数
-- 起始索引:从0开始
	select * from stu;
	-- 1.从0开始查询 查询三条数据;
	SELECT * FROM stu LIMIT 0,3;
	-- 2.每页显示3条数据,查询第1页数据;
	SELECT * FROM stu LIMIT 0,3;
	-- 2.每页显示3条数据,查询第2页数据;
	SELECT * FROM stu LIMIT 3,3;
	-- 2.每页显示3条数据,查询第2页数据;
	SELECT * FROM stu LIMIT 6,3;
	
	
	-- 起始索引 = 当前页面减1 * 每页显示的条数

约束

在这里插入图片描述
约束的分类

在这里插入图片描述

DROP TABLES if EXISTS emp;

-- 员工表
CREATE TABLE emp(
id INT PRIMARY KEY auto_increment ,-- 员工ID 主键且自增长
ename VARCHAR(50) NOT NULL UNIQUE , -- 员工姓名,非空
joindate DATE NOT NUll ,-- 入职日期,非空
salary DOUBLE(7,2) not NULL, -- 工资 ,非空
bonus DOUBLE(7,2)  DEFAULT 0 -- 奖金,如果没有奖金默认为0;
);

INSERT into emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-11-11',8800,5000);

-- 演示主键约束;非空且唯一·
INSERT into emp(id,ename,joindate,salary,bonus) VALUES(NULL,'张三','1999-11-11',8800,5000);

INSERT into emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-11-11',8800,5000);

-- 演示非空约束

INSERT into emp(id,ename,joindate,salary,bonus) VALUES(3,NULL,'1999-11-11',8800,5000);

-- 演示唯一约束
INSERT into emp(id,ename,joindate,salary,bonus) VALUES(2,'张三','1999-11-11',8800,5000);

-- 演示默认约束
INSERT into emp(id,ename,joindate,salary) VALUES(3,'李四','1999-11-11',8800);

INSERT into emp(id,ename,joindate,salary,bonus) VALUES(2,'666','1999-11-11',8800,null);

-- 演示自动增长 auto——increment:当列是数字类型并且唯一约束
INSERT into emp(ename,joindate,salary,bonus) VALUES('666','1999-11-11',8800,null);
INSERT into emp(id,ename,joindate,salary,bonus) VALUES(null,'6666','1999-11-11',8800,null);
INSERT into emp(id,ename,joindate,salary,bonus) VALUES(null,'66666','1999-11-11',8800,null);


SELECT * from emp ;


);
*外键约束

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

代码练习
DROP table  if EXISTS emp ;
DROP table if EXISTS dept;

-- 部门表
CREATE TABLE dept(
id int PRIMARY key auto_increment,
dep_name VARCHAR (20),
addr varchar(20)
);

-- 员工表
CREATE TABLE emp(
  id int primary key auto_increment,
  name varchar(20),
  age int,
  dep_id int,
 
-- 添加外键 dep_id,关联 dept 表的id 主键
constraint fk_emp_dept FOREIGN KEY (dep_id) REFERENCES dept(id)

);

-- 添加 2 个部门

INSERT into dept(dep_name,addr) VALUES
('研发部','广州'),('销售部','深圳');

-- 添加员工,dep_id 表示员工所在部门

INSERT into emp (name,age,dep_id) VALUES
('张三',20,1),
('李四',20,1),
('王五',20,1),
('赵六',20,2),
('孙⑦',22,2),
('周八',18,2);

-- 删除外键
alter table emp drop FOREIGN key fk_emp_dept;

-- 建完表后,添加外键

ALTER table emp add CONSTRAINT fk_emp_dept foreign key (dep_id) REFERENCES dept(id);
SELECT * from emp;

2022/11/1 20:19
本文章根据黑马程序员Javaweb编写完成。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值