iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SQL语句大全(详解)
  • 238
分享到

SQL语句大全(详解)

sql数据库mysql 2023-10-26 08:10:57 238人浏览 安东尼
摘要

sql 前言1 DDL1.1 显示所包含的数据库1.2 创建数据库1.3 删除数据库1.4 使用数据库1.4.1 创建表1.4.2 查看表的结构1.4.3 查看当前数据库下的所有表1.4.4

sql

前言

在这里插入图片描述
  本教程为常用SQL语句的汇总,我把他放到了码云上面,项目地址:https://gitee.com/love-code-bear/java/blob/master/SQL.md


1 DDL

1.1 显示所包含的数据库

SHOW DATABASES;

1.2 创建数据库

CREATE DATABASE db2;CREATE DATABASE IF NOT EXISTS db2;

1.3 删除数据库

DROP DATABASE db2;drop DATABASE IF EXISTS db2;

– 查看当前所使用的数据库

SELECT DATABASE();

1.4 使用数据库

use db1;

1.4.1 创建表

CREATE TABLE jd_user(id int,username VARCHAR(32),passWord VARCHAR(32));

1.4.2 查看表的结构

DESC stu;

1.4.3 查看当前数据库下的所有表

USE DATABASE db1;SHOW TABLES;

1.4.4 基础的增删改查

1.4.4.1 删除表
DROP TABLE tb_user;DROP TABLE IF EXISTS tb_user;
1.4.4.2 添加列
ALTER TABLE jd_user ADD address VARCHAR(32);
1.4.4.3 修改表名
ALTER TABLE jd_user RENAME TO jd_user;
1.4.4.4 修改数据类型
ALTER TABLE jd_user MODIFY address CHAR(32);DESC jd_user;
1.4.4.5 修改列名和数据类型
ALTER TABLE jd_user CHANGE address location VARCHAR(64);

5 查询所有数据

SELECT * FROM jd_user;SELECT * FROM stu;

2 DML

2.1 给指定列添加数据

2.1.1 修改中文列的编码格式(修改列名和数据类型):

alter table stu change name name varchar(255) character set utf8;INSERT INTO stu(id,name) VALUES(1,'张三');

2.1.2 给所有列添加数据

alter table stu change sex sex varchar(255) character set utf8;INSERT INTO stu(id,name,sex,birthday,score,email,tel,status) VALUES(2,'lisa','女','1999-11-11',98.00,'1@qq.com',1123,1);

2.1.3 给所有列添加数据,列名的列表可以省略

INSERT INTO stu VALUES(3,'小米','男','1998-10-17',93.00,'2@qq.com',1433,1);

2.1.4 批量添加

INSERT INTO stu VALUES(4,'huawei','男','1998-10-17',93.00,'2@qq.com',1433,1),(5,'荣耀','男','1998-10-17',93.00,'2@qq.com',1433,1),(6,'苹果','男','1998-10-17',93.00,'2@qq.com',1433,1);

2.2 修改数据

2.2.1 将张三的性别改为男

UPDATE stu SET sex = '男' WHERE name = '张三';

2.2.2 将张三的生日改成2000-02-28,成绩改成99.00

UPDATE stu SET birthday = '2000-02-28',score = '99.00' WHERE name = '张三';

2.2.3 如果update语句没有where条件,则表中的数据全部都被修改

2.3 删除数据

2.3.1 删除小米记录

DELETE FROM stu WHERE name = '小米';

2.4 简单的创建表,添加数据,查询数据

– 使用数据库
USE db1;
– 创建表

CREATE TABLE stu1 (id int,name VARCHAR(32),age int,sex VARCHAR(4),address VARCHAR(64),math DOUBLE(5,2),english DOUBLE(5,2),hire_date DATE);

– 插入数据

ALTER TABLE stu1 CHANGE name name VARCHAR(32) character set utf8;ALTER TABLE stu1 CHANGE sex sex VARCHAR(4) character set utf8;ALTER TABLE stu1 CHANGE address address VARCHAR(64) character set utf8;INSERT INTO stu1(id,name,age,sex,address,math,english,hire_date) VALUES(1,'张一',25,'男','杭州',66.00,78.00,'1998-09-09'),(2,'张二',24,'女','北京',87.00,76.00,'1996-09-09'),(3,'张三',22,'男','郑州',94.00,65.00,'1997-09-09'),(4,'张四',23,'男','合肥',69.00,75.00,'1998-09-09'),(5,'张五',23,'女','无锡',76.00,79.00,'1999-09-09'),(6,'张六',24,'女','苏州',88.00,94.00,'1998-03-09'),(7,'张七',21,'男','南通',89.00,90.00,'1998-05-09'),(8,'张八',22,'男','南充',98.00,90.00,'1998-07-09');

– 查询所有数据

SELECT * FROM stu1;USE db1;

3 DQL

3.1 基础查询

3.1.1 查询所有列的数据,列名的列表可以使用*代替

SELECT *FROM stu1;SELECT `name`,age,sex,address,math,english,hire_date FROM stu1;

3.1.2 查询name age 两列

SELECT `name`,age FROM stu1;

3.1.3 查询英语分数

SELECT english FROM stu1;

3.1.4 去除重复记录

SELECT DISTINCT english FROM stu1;

3.1.5 查询时起别名 as

SELECT name AS 姓名,math AS 数学,english AS 英语 FROM stu1;

3.2 条件查询

3.2.1 查询年龄大于23岁的学员信息

SELECT * FROM stu1WHERE age > 23;

3.2.2 查询年龄>=24岁的学员信息

SELECT * FROM stu1 WHERE age >= 24;

3.2.3 查询21<=年龄<=23岁的学员信息

SELECT * FROM stu1 WHERE age>=21 AND age <= 23;SELECT * FROM stu1 WHERE age BETWEEN 21 AND 23;

3.2.4 查询入学时间在1997-05-09–1998-07-09之间的学员信息

SELECT * FROM stu1 WHERE hire_date BETWEEN '1997-05-09' AND '1998-07-09';

3.2.5 查询年龄等于21岁的学员信息

SELECT * FROM stu1 WHERE age = 21;

3.2.6 查询年龄等于21岁或者年龄等于24岁或者年龄等于25岁的学员信息

SELECT * FROM stu1 WHERE age = 21 OR age = 24 OR age = 25;SELECT * FROM stu1 WHERE age IN(21,24,25);

3.2.7 查询英语成绩为空null的学员信息

SELECT * FROM stu1 WHERE english IS NOT null;

3.3 模糊查询

3.3.1 查询姓’张’的学员信息

SELECT * FROM stu1 WHERE `name` LIKE '张%';-- 查询第二个字是'三'的学员信息SELECT * FROM stu1 WHERE `name` LIKE '_三%';-- 查询名字中含有'四'的学员信息SELECT * FROM stu1 WHERE `name` LIKE '%四%';

3.4 排序查询

3.4.1 查询学生信息,按照年龄升序排列

SELECT * FROM stu1 ORDER BY age ASC;

3.4.2 查询学生信息,按照数学成绩降序排列

SELECT * FROM stu1 ORDER BY math DESC;

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

SELECT * FROM stu1 ORDER BY english DESC , math ASC;

3.5 分组查询

3.5.1 聚合函数

3.5.1.1 统计班级有多少个学生
SELECT COUNT(id) FROM stu1;SELECT COUNT(*) FROM stu1;
3.5.1.2 查询数学成绩最高分
SELECT MAX(math) FROM stu1;
3.5.1.3 查询数学成绩最低分
SELECT MIN(math) FROM stu1;
3.5.1.4 查询数学成绩总分
SELECT SUM(math) FROM stu1;
3.5.1.5 查询数学成绩平均分
SELECT AVG(math) FROM stu1;

3.5.2 分组函数

3.5.2.1 查询男同学和女同学的各自平均分
SELECT sex,AVG(math) FROM stu1 GROUP BY sex;
3.5.2.2 查询男同学和女同学的各自平均分,以及各自人数
SELECT sex,AVG(math),COUNT(*) FROM stu1 GROUP BY sex;
3.5.2.3 查询男同学和女同学的各自平均分,以及各自人数,要求分数低于80的不参与分组
SELECT sex,AVG(math),COUNT(*) FROM stu1 WHERE math > 80 GROUP BY sex;
3.5.2.4 查询男同学和女同学的各自平均分,以及各自人数,要求分数低于80的不参与分组,分组之后人数大于2
SELECT sex,AVG(math),COUNT(*) FROM stu1 WHERE math > 80 GROUP BY sex HAVING COUNT(*) > 2;

3.6 分页查询

SELECT * FROM  stu1;

3.6.1 从0开始查询,查询第一页数据

SELECT  * FROM stu1 LIMIT 0,3;

3.62 每页显示3条数据显示第一页

SELECT  * FROM stu1 LIMIT 0,3;

3.6.3 每页显示3条数据显示第二页

SELECT  * FROM stu1 LIMIT 3,3;

3.6.4 每页显示3条数据显示第三页

SELECT  * FROM stu1 LIMIT 6,3;

3.6.5 每页显示4条数据显示第二页

SELECT  * FROM stu1 LIMIT 4,4;

3.7 约束

3.7.1 字段的约束

-- 员工表CREATE TABLE emp(id INT PRIMARY KEY,ename VARCHAR(32) UNIQUE,joindate DATE NOT NULL,salary DOUBLE(7,2) NOT NULL,bonus DOUBLE(7,2) DEFAULT 0);DESC emp;ALTER TABLE emp CHANGE ename ename VARCHAR(32) CHARACTER set utf8;INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-11-11',8800,5000);SELECT * FROM emp;

3.7.2 演示主键约束,非空且唯一

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(2,'李四','1999-11-11',8800,5000);

3.7.3 演示非空约束

DELETE FROM emp WHERE id = 3;INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(3,null,'1999-11-11',8800,5000);

3.7.4 演示唯一约束

INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(3,'李四','1999-11-11',8800,5000);

3.7.5 对约束的操作

3.7.5.1 删除约束
ALTER TABLE emp MODIFY ename VARCHAR(32) CHARACTER set utf8;
3.7.5.2 添加约束
ALTER TABLE emp MODIFY ename VARCHAR(32) NOT NULL ;DESC emp;DROP TABLE emp;
3.7.5.3 外键约束(实例演示)
-- 员工表CREATE TABLE emp(id INT PRIMARY KEY auto_increment,name VARCHAR(32),age INT,dep_id INT,-- 添加一个外键约束CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id));-- 部门表CREATE TABLE dept(id INT PRIMARY KEY auto_increment,dep_name VARCHAR(32),address VARCHAR(32));DESC emp;DESC dept;DROP TABLE emp;DROP TABLE dept;ALTER TABLE emp CHANGE name name VARCHAR(32) CHARACTER set utf8;ALTER TABLE dept CHANGE dep_name dep_name VARCHAR(32) CHARACTER set utf8;ALTER TABLE dept CHANGE address address VARCHAR(32) CHARACTER set utf8;INSERT INTO emp (name,age,dep_id) VALUES('张三',20,1),('李四',20,1),('王五',20,1),('赵六',20,2),('孙七',22,2),('周八',18,2);INSERT INTO dept (dep_name,address) VALUES('研发部','广州'),('销售部','深圳');SELECT * FROM emp;SELECT * FROM dept;-- 删除外键ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;-- 添加外键ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id);

4 外键

使用数据库,展示所有表

USE db1;SHOW TABLES;

4.1 外键的建立

4.1.1 多对多关系

-- 订单表CREATE TABLE tb_order(id INT PRIMARY KEY auto_increment,payment double(10,2),payment_type TINYINT,status TINYINT);-- 商品表CREATE TABLE tb_Goods(id INT PRIMARY KEY auto_increment,title VARCHAR(100),price DOUBLE(10,2));-- 中间表CREATE TABLE tb_order_goods(id INT PRIMARY KEY auto_increment,order_id INT,goods_id INT);-- 添加外键ALTER TABLE tb_order_goods ADD CONSTRAINT fk_order_id FOREIGN KEY(order_id) REFERENCES tb_order(id);ALTER TABLE tb_order_goods ADD CONSTRAINT fk_goods_id FOREIGN KEY(goods_id) REFERENCES tb_goods(id);SHOW TABLES;

4.1.2 一对一关系

-- 用户表CREATE TABLE tb_user(id INT PRIMARY KEY auto_increment,photo VARCHAR(100),name VARCHAR(32),age INT,sex VARCHAR(4),desc_id INT UNIQUE,CONSTRAINT tb_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id) );-- 用户详情表CREATE TABLE tb_user_desc(id INT PRIMARY KEY auto_increment,city VARCHAR(32),edu VARCHAR(32),income DOUBLE(7,2),status TINYINT);ALTER TABLE tb_user_desc CHANGE status status VARCHAR(16) CHARACTER set utf8;INSERT into tb_user_desc(city,edu,income,status) VALUES('广州','本科',3000,'单身'),('广州','硕士',12000,'单身');INSERT into tb_user(photo,`name`,age,sex,desc_id) VALUES('c盘','林青霞',22,'女',1),('d盘','风清扬',24,'男',2);ALTER TABLE tb_user auto_increment = 1;SELECT * FROM tb_user;SELECT * FROM tb_user_desc;DESC tb_user;DESC tb_user_desc;DROP TABLE tb_user;

1.3 查看所有外键

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;

4.2 实例演示练习

-- 音乐专辑表名CREATE TABLE music(title VARCHAR(32),alias VARCHAR(32),image VARCHAR(64),style VARCHAR(16),type VARCHAR(8),medium VARCHAR(8),publish_time DATE,publisher VARCHAR(8),number TINYINT,barcode BIGINT,summary VARCHAR(1024),artist VARCHAR(32),id INT UNIQUE);-- 曲目表名CREATE TABLE song(name VARCHAR(32),serial_number TINYINT,id INT UNIQUE);-- 评论表名CREATE TABLE review(content VARCHAR(1024),rating TINYINT,review datetime,content_user_id INT,content_music_id INT);-- 用户表名CREATE TABLE user(username VARCHAR(32),image VARCHAR(64),signture VARCHAR(64),name VARCHAR(32),id INT PRIMARY KEY);-- 展示DESC music;DESC song;DESC review;DESC user;-- 删除DROP TABLE music;DROP TABLE song;DROP TABLE review;DROP TABLE user;-- 专辑和用户的中间表CREATE TABLE music_user(id INT PRIMARY KEY auto_increment,music_id INT,user_id INT);-- 添加专辑和用户外键ALTER TABLE music_user ADD CONSTRAINT fk_music_id FOREIGN KEY(music_id) REFERENCES music(id);ALTER TABLE music_user ADD CONSTRAINT fk_user_id FOREIGN KEY(user_id) REFERENCES user(id);-- 添加短评和用户外键ALTER TABLE review ADD CONSTRAINT fk_review_user FOREIGN KEY(content_user_id) REFERENCES user(id);-- 添加短评专辑外键ALTER TABLE review ADD CONSTRAINT fk_review_music FOREIGN KEY(content_music_id) REFERENCES music(id);-- 添加曲目和专辑外键ALTER TABLE song ADD CONSTRAINT fk_song_music FOREIGN KEY(id) REFERENCES music(id);ALTER TABLE song DROP FOREIGN KEY fk_song_user;

逆向化模型

– 多表查询

SELECT * FROM emp;SELECT * FROM dept;SELECT * FROM emp,dept;

– 产生笛卡尔积(有ab两个集合,去a和b所有的组合情况)
– 消除无效数据
– 查询emp和dept的数据,emp.dep_id = dept.id
– 隐式内连接

SELECT * FROM emp,dept WHERE emp.dep_id = dept.id;

– 查询emp的name,age,dept表的dep_name

SELECT emp.`name`,emp.age,dept.dep_name FROM emp,dept WHERE emp.dep_id = dept.id;

– 给表起别名

SELECT t1.`name`,t1.age,t2.dep_name FROM emp AS t1,dept AS t2 WHERE t1.dep_id = t2.id;

– 显式内连接

SELECT * FROM emp LEFT OUTER JOIN dept ON emp.dep_id = dept.id;SELECT * FROM emp LEFT  JOIN dept ON emp.dep_id = dept.id;

– 右外连接

SELECT * FROM emp RIGHT OUTER JOIN dept ON emp.dep_id = dept.id;SELECT * FROM emp RIGHT  JOIN dept ON emp.dep_id = dept.id;```# 1 DDL## 1.1  显示所包含的数据库```MysqlSHOW DATABASES;

1.2 创建数据库

CREATE DATABASE db2;CREATE DATABASE IF NOT EXISTS db2;

1.3 删除数据库

DROP DATABASE db2;drop DATABASE IF EXISTS db2;

– 查看当前所使用的数据库

SELECT DATABASE();

1.4 使用数据库

use db1;

1.4.1 创建表

CREATE TABLE jd_user(id int,username VARCHAR(32),password VARCHAR(32));

1.4.2 查看表的结构

DESC stu;

1.4.3 查看当前数据库下的所有表

USE DATABASE db1;SHOW TABLES;

1.4.4 基础的增删改查

1.4.4.1 删除表
DROP TABLE tb_user;DROP TABLE IF EXISTS tb_user;
1.4.4.2 添加列
ALTER TABLE jd_user ADD address VARCHAR(32);
1.4.4.3 修改表名
ALTER TABLE jd_user RENAME TO jd_user;
1.4.4.4 修改数据类型
ALTER TABLE jd_user MODIFY address CHAR(32);DESC jd_user;
1.4.4.5 修改列名和数据类型
ALTER TABLE jd_user CHANGE address location VARCHAR(64);

5 查询所有数据

SELECT * FROM jd_user;SELECT * FROM stu;

2 DML

2.1 给指定列添加数据

2.1.1 修改中文列的编码格式(修改列名和数据类型):

alter table stu change name name varchar(255) character set utf8;INSERT INTO stu(id,name) VALUES(1,'张三');

2.1.2 给所有列添加数据

alter table stu change sex sex varchar(255) character set utf8;INSERT INTO stu(id,name,sex,birthday,score,email,tel,status) VALUES(2,'lisa','女','1999-11-11',98.00,'1@qq.com',1123,1);

2.1.3 给所有列添加数据,列名的列表可以省略

INSERT INTO stu VALUES(3,'小米','男','1998-10-17',93.00,'2@qq.com',1433,1);

2.1.4 批量添加

INSERT INTO stu VALUES(4,'huawei','男','1998-10-17',93.00,'2@qq.com',1433,1),(5,'荣耀','男','1998-10-17',93.00,'2@qq.com',1433,1),(6,'苹果','男','1998-10-17',93.00,'2@qq.com',1433,1);

2.2 修改数据

2.2.1 将张三的性别改为男

UPDATE stu SET sex = '男' WHERE name = '张三';

2.2.2 将张三的生日改成2000-02-28,成绩改成99.00

UPDATE stu SET birthday = '2000-02-28',score = '99.00' WHERE name = '张三';

2.2.3 如果update语句没有where条件,则表中的数据全部都被修改

2.3 删除数据

2.3.1 删除小米记录

DELETE FROM stu WHERE name = '小米';

2.4 简单的创建表,添加数据,查询数据

– 使用数据库
USE db1;
– 创建表

CREATE TABLE stu1 (id int,name VARCHAR(32),age int,sex VARCHAR(4),address VARCHAR(64),math DOUBLE(5,2),english DOUBLE(5,2),hire_date DATE);

– 插入数据

ALTER TABLE stu1 CHANGE name name VARCHAR(32) character set utf8;ALTER TABLE stu1 CHANGE sex sex VARCHAR(4) character set utf8;ALTER TABLE stu1 CHANGE address address VARCHAR(64) character set utf8;INSERT INTO stu1(id,name,age,sex,address,math,english,hire_date) VALUES(1,'张一',25,'男','杭州',66.00,78.00,'1998-09-09'),(2,'张二',24,'女','北京',87.00,76.00,'1996-09-09'),(3,'张三',22,'男','郑州',94.00,65.00,'1997-09-09'),(4,'张四',23,'男','合肥',69.00,75.00,'1998-09-09'),(5,'张五',23,'女','无锡',76.00,79.00,'1999-09-09'),(6,'张六',24,'女','苏州',88.00,94.00,'1998-03-09'),(7,'张七',21,'男','南通',89.00,90.00,'1998-05-09'),(8,'张八',22,'男','南充',98.00,90.00,'1998-07-09');

– 查询所有数据

SELECT * FROM stu1;USE db1;

3 DQL

3.1 基础查询

3.1.1 查询所有列的数据,列名的列表可以使用*代替

SELECT *FROM stu1;SELECT `name`,age,sex,address,math,english,hire_date FROM stu1;

3.1.2 查询name age 两列

SELECT `name`,age FROM stu1;

3.1.3 查询英语分数

SELECT english FROM stu1;

3.1.4 去除重复记录

SELECT DISTINCT english FROM stu1;

3.1.5 查询时起别名 as

SELECT name AS 姓名,math AS 数学,english AS 英语 FROM stu1;

3.2 条件查询

3.2.1 查询年龄大于23岁的学员信息

SELECT * FROM stu1WHERE age > 23;

3.2.2 查询年龄>=24岁的学员信息

SELECT * FROM stu1 WHERE age >= 24;

3.2.3 查询21<=年龄<=23岁的学员信息

SELECT * FROM stu1 WHERE age>=21 AND age <= 23;SELECT * FROM stu1 WHERE age BETWEEN 21 AND 23;

3.2.4 查询入学时间在1997-05-09–1998-07-09之间的学员信息

SELECT * FROM stu1 WHERE hire_date BETWEEN '1997-05-09' AND '1998-07-09';

3.2.5 查询年龄等于21岁的学员信息

SELECT * FROM stu1 WHERE age = 21;

3.2.6 查询年龄等于21岁或者年龄等于24岁或者年龄等于25岁的学员信息

SELECT * FROM stu1 WHERE age = 21 OR age = 24 OR age = 25;SELECT * FROM stu1 WHERE age IN(21,24,25);

3.2.7 查询英语成绩为空null的学员信息

SELECT * FROM stu1 WHERE english IS NOT null;

3.3 模糊查询

3.3.1 查询姓’张’的学员信息

SELECT * FROM stu1 WHERE `name` LIKE '张%';-- 查询第二个字是'三'的学员信息SELECT * FROM stu1 WHERE `name` LIKE '_三%';-- 查询名字中含有'四'的学员信息SELECT * FROM stu1 WHERE `name` LIKE '%四%';

3.4 排序查询

3.4.1 查询学生信息,按照年龄升序排列

SELECT * FROM stu1 ORDER BY age ASC;

3.4.2 查询学生信息,按照数学成绩降序排列

SELECT * FROM stu1 ORDER BY math DESC;

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

SELECT * FROM stu1 ORDER BY english DESC , math ASC;

3.5 分组查询

3.5.1 聚合函数

3.5.1.1 统计班级有多少个学生
SELECT COUNT(id) FROM stu1;SELECT COUNT(*) FROM stu1;
3.5.1.2 查询数学成绩最高分
SELECT MAX(math) FROM stu1;
3.5.1.3 查询数学成绩最低分
SELECT MIN(math) FROM stu1;
3.5.1.4 查询数学成绩总分
SELECT SUM(math) FROM stu1;
3.5.1.5 查询数学成绩平均分
SELECT AVG(math) FROM stu1;

3.5.2 分组函数

3.5.2.1 查询男同学和女同学的各自平均分
SELECT sex,AVG(math) FROM stu1 GROUP BY sex;
3.5.2.2 查询男同学和女同学的各自平均分,以及各自人数
SELECT sex,AVG(math),COUNT(*) FROM stu1 GROUP BY sex;
3.5.2.3 查询男同学和女同学的各自平均分,以及各自人数,要求分数低于80的不参与分组
SELECT sex,AVG(math),COUNT(*) FROM stu1 WHERE math > 80 GROUP BY sex;
3.5.2.4 查询男同学和女同学的各自平均分,以及各自人数,要求分数低于80的不参与分组,分组之后人数大于2
SELECT sex,AVG(math),COUNT(*) FROM stu1 WHERE math > 80 GROUP BY sex HAVING COUNT(*) > 2;

3.6 分页查询

SELECT * FROM  stu1;

3.6.1 从0开始查询,查询第一页数据

SELECT  * FROM stu1 LIMIT 0,3;

3.62 每页显示3条数据显示第一页

SELECT  * FROM stu1 LIMIT 0,3;

3.6.3 每页显示3条数据显示第二页

SELECT  * FROM stu1 LIMIT 3,3;

3.6.4 每页显示3条数据显示第三页

SELECT  * FROM stu1 LIMIT 6,3;

3.6.5 每页显示4条数据显示第二页

SELECT  * FROM stu1 LIMIT 4,4;

3.7 约束

3.7.1 字段的约束

-- 员工表CREATE TABLE emp(id INT PRIMARY KEY,ename VARCHAR(32) UNIQUE,joindate DATE NOT NULL,salary DOUBLE(7,2) NOT NULL,bonus DOUBLE(7,2) DEFAULT 0);DESC emp;ALTER TABLE emp CHANGE ename ename VARCHAR(32) CHARACTER set utf8;INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(1,'张三','1999-11-11',8800,5000);SELECT * FROM emp;

3.7.2 演示主键约束,非空且唯一

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(2,'李四','1999-11-11',8800,5000);

3.7.3 演示非空约束

DELETE FROM emp WHERE id = 3;INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(3,null,'1999-11-11',8800,5000);

3.7.4 演示唯一约束

INSERT INTO emp(id,ename,joindate,salary,bonus) VALUES(3,'李四','1999-11-11',8800,5000);

3.7.5 对约束的操作

3.7.5.1 删除约束
ALTER TABLE emp MODIFY ename VARCHAR(32) CHARACTER set utf8;
3.7.5.2 添加约束
ALTER TABLE emp MODIFY ename VARCHAR(32) NOT NULL ;DESC emp;DROP TABLE emp;
3.7.5.3 外键约束(实例演示)
-- 员工表CREATE TABLE emp(id INT PRIMARY KEY auto_increment,name VARCHAR(32),age INT,dep_id INT,-- 添加一个外键约束CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id));-- 部门表CREATE TABLE dept(id INT PRIMARY KEY auto_increment,dep_name VARCHAR(32),address VARCHAR(32));DESC emp;DESC dept;DROP TABLE emp;DROP TABLE dept;ALTER TABLE emp CHANGE name name VARCHAR(32) CHARACTER set utf8;ALTER TABLE dept CHANGE dep_name dep_name VARCHAR(32) CHARACTER set utf8;ALTER TABLE dept CHANGE address address VARCHAR(32) CHARACTER set utf8;INSERT INTO emp (name,age,dep_id) VALUES('张三',20,1),('李四',20,1),('王五',20,1),('赵六',20,2),('孙七',22,2),('周八',18,2);INSERT INTO dept (dep_name,address) VALUES('研发部','广州'),('销售部','深圳');SELECT * FROM emp;SELECT * FROM dept;-- 删除外键ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;-- 添加外键ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id);

4 外键

使用数据库,展示所有表

USE db1;SHOW TABLES;

4.1 外键的建立

4.1.1 多对多关系

-- 订单表CREATE TABLE tb_order(id INT PRIMARY KEY auto_increment,payment double(10,2),payment_type TINYINT,status TINYINT);-- 商品表CREATE TABLE tb_goods(id INT PRIMARY KEY auto_increment,title VARCHAR(100),price DOUBLE(10,2));-- 中间表CREATE TABLE tb_order_goods(id INT PRIMARY KEY auto_increment,order_id INT,goods_id INT);-- 添加外键ALTER TABLE tb_order_goods ADD CONSTRAINT fk_order_id FOREIGN KEY(order_id) REFERENCES tb_order(id);ALTER TABLE tb_order_goods ADD CONSTRAINT fk_goods_id FOREIGN KEY(goods_id) REFERENCES tb_goods(id);SHOW TABLES;

4.1.2 一对一关系

-- 用户表CREATE TABLE tb_user(id INT PRIMARY KEY auto_increment,photo VARCHAR(100),name VARCHAR(32),age INT,sex VARCHAR(4),desc_id INT UNIQUE,CONSTRAINT tb_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id) );-- 用户详情表CREATE TABLE tb_user_desc(id INT PRIMARY KEY auto_increment,city VARCHAR(32),edu VARCHAR(32),income DOUBLE(7,2),status TINYINT);ALTER TABLE tb_user_desc CHANGE status status VARCHAR(16) CHARACTER set utf8;INSERT into tb_user_desc(city,edu,income,status) VALUES('广州','本科',3000,'单身'),('广州','硕士',12000,'单身');INSERT into tb_user(photo,`name`,age,sex,desc_id) VALUES('c盘','林青霞',22,'女',1),('d盘','风清扬',24,'男',2);ALTER TABLE tb_user auto_increment = 1;SELECT * FROM tb_user;SELECT * FROM tb_user_desc;DESC tb_user;DESC tb_user_desc;DROP TABLE tb_user;

1.3 查看所有外键

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;

4.2 实例演示练习

-- 音乐专辑表名CREATE TABLE music(title VARCHAR(32),alias VARCHAR(32),image VARCHAR(64),style VARCHAR(16),type VARCHAR(8),medium VARCHAR(8),publish_time DATE,publisher VARCHAR(8),number TINYINT,barcode BIGINT,summary VARCHAR(1024),artist VARCHAR(32),id INT UNIQUE);-- 曲目表名CREATE TABLE song(name VARCHAR(32),serial_number TINYINT,id INT UNIQUE);-- 评论表名CREATE TABLE review(content VARCHAR(1024),rating TINYINT,review datetime,content_user_id INT,content_music_id INT);-- 用户表名CREATE TABLE user(username VARCHAR(32),image VARCHAR(64),signture VARCHAR(64),name VARCHAR(32),id INT PRIMARY KEY);-- 展示DESC music;DESC song;DESC review;DESC user;-- 删除DROP TABLE music;DROP TABLE song;DROP TABLE review;DROP TABLE user;-- 专辑和用户的中间表CREATE TABLE music_user(id INT PRIMARY KEY auto_increment,music_id INT,user_id INT);-- 添加专辑和用户外键ALTER TABLE music_user ADD CONSTRAINT fk_music_id FOREIGN KEY(music_id) REFERENCES music(id);ALTER TABLE music_user ADD CONSTRAINT fk_user_id FOREIGN KEY(user_id) REFERENCES user(id);-- 添加短评和用户外键ALTER TABLE review ADD CONSTRAINT fk_review_user FOREIGN KEY(content_user_id) REFERENCES user(id);-- 添加短评专辑外键ALTER TABLE review ADD CONSTRAINT fk_review_music FOREIGN KEY(content_music_id) REFERENCES music(id);-- 添加曲目和专辑外键ALTER TABLE song ADD CONSTRAINT fk_song_music FOREIGN KEY(id) REFERENCES music(id);ALTER TABLE song DROP FOREIGN KEY fk_song_user;

逆向化模型

music

– 多表查询

SELECT * FROM emp;SELECT * FROM dept;SELECT * FROM emp,dept;

– 产生笛卡尔积(有ab两个集合,去a和b所有的组合情况)
– 消除无效数据
– 查询emp和dept的数据,emp.dep_id = dept.id
– 隐式内连接

SELECT * FROM emp,dept WHERE emp.dep_id = dept.id;

– 查询emp的name,age,dept表的dep_name

SELECT emp.`name`,emp.age,dept.dep_name FROM emp,dept WHERE emp.dep_id = dept.id;

– 给表起别名

SELECT t1.`name`,t1.age,t2.dep_name FROM emp AS t1,dept AS t2 WHERE t1.dep_id = t2.id;

– 显式内连接

SELECT * FROM emp LEFT OUTER JOIN dept ON emp.dep_id = dept.id;SELECT * FROM emp LEFT  JOIN dept ON emp.dep_id = dept.id;

– 右外连接

SELECT * FROM emp RIGHT OUTER JOIN dept ON emp.dep_id = dept.id;SELECT * FROM emp RIGHT  JOIN dept ON emp.dep_id = dept.id;

总结

  以上就是SQL语句大全的全部内容,希望对你有所帮助。

来源地址:https://blog.csdn.net/qq_53463544/article/details/129199700

您可能感兴趣的文档:

--结束END--

本文标题: SQL语句大全(详解)

本文链接: https://www.lsjlt.com/news/455563.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL语句大全(详解)
    SQL 前言1 DDL1.1 显示所包含的数据库1.2 创建数据库1.3 删除数据库1.4 使用数据库1.4.1 创建表1.4.2 查看表的结构1.4.3 查看当前数据库下的所有表1.4.4 ...
    99+
    2023-10-26
    sql 数据库 mysql
  • SQL语句大全(3)
    1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部    “where 1=2”全部不选, 如: if @strWhere !=''  begin set @strSQ...
    99+
    2023-01-31
    语句 大全 SQL
  • SQL常用语句大全
    我们在进行开发工作时,对数据库的操作是必不可少的,熟练掌握SQL语句可以让我们对数据库的数据处理变得非常简单,所以学习SQL语句是非常有必要的,下面汇总了一些常用的SQL语句 SQL语句的类型 DDL(Data Definition Lan...
    99+
    2023-08-31
    sql 数据库
  • SQL数据库语句大全
    目录基础创建数据库删除数据库备份sql server创建 备份数据的 device开始 备份创建新表根据已有的表创建新表:删除新表增加一个列添加主键删除主键创建索引删除索引创建视图删...
    99+
    2024-04-02
  • SQL Update语句详解
    SQL Update语句用于更新数据库表中的数据。它可以修改现有的记录,并根据指定的条件选择要更新的记录。以下是SQL Update...
    99+
    2024-04-09
    SQL
  • 常用的SQL查询语句大全
    这篇文章主要讲解了“常用的SQL查询语句大全”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“常用的SQL查询语句大全”吧!一、基础1、说明:创建数据库CREA...
    99+
    2024-04-02
  • Mybatis超级强大的动态SQL语句大全
    目录1. If 语句2. Where语句2.1 和 where 元素等价的自定义 trim 元素3. Set语句3.1 与 set 元素等价的自定义 trim 元...
    99+
    2024-04-02
  • MySQL语句最全详解
    文章目录 MySQL语句最全详解一、常见sql语句用法与演示前置条件连接命令 1.常用数据库类型2.数据约束(数据表中)3.数据库的备份和还原二、操作数据库(操作数据库之前要通过命令行工...
    99+
    2023-09-02
    mysql 数据库 sql
  • 史上超强最常用SQL语句大全
    目录DDL(Data Definition Language)数据定义语言一、操作库二、操作表一、增加 insert into二、删除 delete三、修改 updateD...
    99+
    2023-02-10
    最常用SQL语句 SQL语句大全
  • MySQL高级进阶sql语句总结大全
    目录SELECTDISTINCTWHEREAND ORINBETWEEN通配符LIkeORDER BY函数city表格字符串函数常用函数实例:concatsubstr...
    99+
    2024-04-02
  • MySQL数据库 | SQL语句详解
    MySQL数据库基本操作——DDL DDL解释: 数据库的常用操作 表结构的常用操作 修改表结构 数据库的常用操作 查看所有的数据库show databases;创建数据库create database if not exists 表名;切...
    99+
    2023-08-23
    数据库 sql mysql
  • sql语句LEFT JOIN拼接表详解
    目录1、语法2、说明3、LEFT JOIN、RIGHT JOIN、INNER JOIN的区别注:4、再来看一个例子,加深印象LEFT JOIN(左连接)是数据库操作中的一种表连接方式...
    99+
    2023-05-18
    LEFT JOIN 拼接表
  • sql语句with as的用法详解
    这篇文章主要介绍“sql语句with as的用法详解”,在日常操作中,相信很多人在sql语句with as的用法详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”sql语句w...
    99+
    2024-04-02
  • MySQL 查询语句大全
    目录 基础查询 直接查询 AS起别名 去重(复)查询 条件查询 算术运算符查询 逻辑运算符查询 正则表达式查询⭐ 模糊查询 范围查询 是否非空判断查询 排序查询  限制查询(分页查询) 随机查询 分组查询 HAVING 高级查询 子...
    99+
    2023-08-31
    mysql 数据库 sql
  • sql语句LEFT JOIN拼接表详解
    目录1、语法2、说明3、LEFT JOIN、RIGHT JOIN、INNER JOIN的区别注:4、再来看一个例子,加深印象LEFT JOIN(左连接)是数据库操作中的一种表连接方式,它返回左边表格中所有的记录和右边表格...
    99+
    2023-05-05
    LEFT JOIN 拼接表
  • Mybatis动态SQL之IF语句详解
    Mysql 5.0 以后,支持了动态sql语句,我们可以通过传递不同的参数得到我们想要的值. 1. Mybatis–动态SQL之IF语句 没有搭建环境的请点击 1.1 BlogMap...
    99+
    2024-04-02
  • Mysql查询语句大全
    简单查询 ## 直接查询语法:select 字段 from 表名;举例:select name, age from student;解析:从 student 表中查询 name 与 age ## 条件查询语法:selec...
    99+
    2023-08-16
    mysql sql 数据库
  • 【MySQL】MySQL基本语句大全
    个人主页:【😊个人主页】 系列专栏:【❤️MySQL】 文章目录 前言结构化查询语句分类MySQL语句大全📚DDL(对数据库和表的操作)🤖DQL(查询语句)💻...
    99+
    2023-08-17
    mysql 数据库
  • SQL查询语句全面指南
    SQL查询语句命令大全,需要具体代码示例 SQL(Structured Query Language)是用于管理关系型数据库的标准编程语言。它可以使用各种查询语句来提取所需的数据,从而...
    99+
    2024-02-22
    sql查询语句 sql命令 命令大全
  • SQL update select结合语句详解及应用
    QL update select语句 最常用的update语法是: UPDATE TABLE_NAME SET column_name1 = VALUE WHRER c...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作