SQL语句大全(详解)

news2024/12/25 2:36:12

SQL

  • 前言
  • 1 DDL
    • 1.1 显示所包含的数据库
    • 1.2 创建数据库
    • 1.3 删除数据库
    • 1.4 使用数据库
      • 1.4.1 创建表
      • 1.4.2 查看表的结构
      • 1.4.3 查看当前数据库下的所有表
      • 1.4.4 基础的增删改查
        • 1.4.4.1 删除表
        • 1.4.4.2 添加列
        • 1.4.4.3 修改表名
        • 1.4.4.4 修改数据类型
        • 1.4.4.5 修改列名和数据类型
  • 2 DML
    • 2.1 给指定列添加数据
      • 2.1.1 修改中文列的编码格式(修改列名和数据类型):
      • 2.1.2 给所有列添加数据
      • 2.1.3 给所有列添加数据,列名的列表可以省略
      • 2.1.4 批量添加
    • 2.2 修改数据
      • 2.2.1 将张三的性别改为男
      • 2.2.2 将张三的生日改成2000-02-28,成绩改成99.00
      • 2.2.3 如果update语句没有where条件,则表中的数据全部都被修改
    • 2.3 删除数据
      • 2.3.1 删除小米记录
    • 2.4 简单的创建表,添加数据,查询数据
  • 3 DQL
    • 3.1 基础查询
      • 3.1.1 查询所有列的数据,列名的列表可以使用*代替
      • 3.1.2 查询name age 两列
      • 3.1.3 查询英语分数
      • 3.1.4 去除重复记录
      • 3.1.5 查询时起别名 as
    • 3.2 条件查询
      • 3.2.1 查询年龄大于23岁的学员信息
      • 3.2.2 查询年龄>=24岁的学员信息
      • 3.2.3 查询21<=年龄<=23岁的学员信息
      • 3.2.4 查询入学时间在1997-05-09--1998-07-09之间的学员信息
      • 3.2.5 查询年龄等于21岁的学员信息
      • 3.2.6 查询年龄等于21岁或者年龄等于24岁或者年龄等于25岁的学员信息
      • 3.2.7 查询英语成绩为空null的学员信息
    • 3.3 模糊查询
      • 3.3.1 查询姓'张'的学员信息
    • 3.4 排序查询
      • 3.4.1 查询学生信息,按照年龄升序排列
      • 3.4.2 查询学生信息,按照数学成绩降序排列
      • 3.4.3 查询学生信息,按照英语成绩降序排列,如果英语成绩一样,再按照数学成绩升序排列
    • 3.5 分组查询
      • 3.5.1 聚合函数
        • 3.5.1.1 统计班级有多少个学生
        • 3.5.1.2 查询数学成绩最高分
        • 3.5.1.3 查询数学成绩最低分
        • 3.5.1.4 查询数学成绩总分
        • 3.5.1.5 查询数学成绩平均分
      • 3.5.2 分组函数
        • 3.5.2.1 查询男同学和女同学的各自平均分
        • 3.5.2.2 查询男同学和女同学的各自平均分,以及各自人数
        • 3.5.2.3 查询男同学和女同学的各自平均分,以及各自人数,要求分数低于80的不参与分组
        • 3.5.2.4 查询男同学和女同学的各自平均分,以及各自人数,要求分数低于80的不参与分组,分组之后人数大于2
    • 3.6 分页查询
      • 3.6.1 从0开始查询,查询第一页数据
      • 3.62 每页显示3条数据显示第一页
      • 3.6.3 每页显示3条数据显示第二页
      • 3.6.4 每页显示3条数据显示第三页
      • 3.6.5 每页显示4条数据显示第二页
    • 3.7 约束
      • 3.7.1 字段的约束
      • 3.7.2 演示主键约束,非空且唯一
      • 3.7.3 演示非空约束
      • 3.7.4 演示唯一约束
      • 3.7.5 对约束的操作
        • 3.7.5.1 删除约束
        • 3.7.5.2 添加约束
        • 3.7.5.3 外键约束(实例演示)
  • 4 外键
    • 4.1 外键的建立
      • 4.1.1 多对多关系
      • 4.1.2 一对一关系
    • 4.2 实例演示练习
      • 逆向化模型
    • 1.2 创建数据库
    • 1.3 删除数据库
    • 1.4 使用数据库
      • 1.4.1 创建表
      • 1.4.2 查看表的结构
      • 1.4.3 查看当前数据库下的所有表
      • 1.4.4 基础的增删改查
        • 1.4.4.1 删除表
        • 1.4.4.2 添加列
        • 1.4.4.3 修改表名
        • 1.4.4.4 修改数据类型
        • 1.4.4.5 修改列名和数据类型
  • 2 DML
    • 2.1 给指定列添加数据
      • 2.1.1 修改中文列的编码格式(修改列名和数据类型):
      • 2.1.2 给所有列添加数据
      • 2.1.3 给所有列添加数据,列名的列表可以省略
      • 2.1.4 批量添加
    • 2.2 修改数据
      • 2.2.1 将张三的性别改为男
      • 2.2.2 将张三的生日改成2000-02-28,成绩改成99.00
      • 2.2.3 如果update语句没有where条件,则表中的数据全部都被修改
    • 2.3 删除数据
      • 2.3.1 删除小米记录
    • 2.4 简单的创建表,添加数据,查询数据
  • 3 DQL
    • 3.1 基础查询
      • 3.1.1 查询所有列的数据,列名的列表可以使用*代替
      • 3.1.2 查询name age 两列
      • 3.1.3 查询英语分数
      • 3.1.4 去除重复记录
      • 3.1.5 查询时起别名 as
    • 3.2 条件查询
      • 3.2.1 查询年龄大于23岁的学员信息
      • 3.2.2 查询年龄>=24岁的学员信息
      • 3.2.3 查询21<=年龄<=23岁的学员信息
      • 3.2.4 查询入学时间在1997-05-09--1998-07-09之间的学员信息
      • 3.2.5 查询年龄等于21岁的学员信息
      • 3.2.6 查询年龄等于21岁或者年龄等于24岁或者年龄等于25岁的学员信息
      • 3.2.7 查询英语成绩为空null的学员信息
    • 3.3 模糊查询
      • 3.3.1 查询姓'张'的学员信息
    • 3.4 排序查询
      • 3.4.1 查询学生信息,按照年龄升序排列
      • 3.4.2 查询学生信息,按照数学成绩降序排列
      • 3.4.3 查询学生信息,按照英语成绩降序排列,如果英语成绩一样,再按照数学成绩升序排列
    • 3.5 分组查询
      • 3.5.1 聚合函数
        • 3.5.1.1 统计班级有多少个学生
        • 3.5.1.2 查询数学成绩最高分
        • 3.5.1.3 查询数学成绩最低分
        • 3.5.1.4 查询数学成绩总分
        • 3.5.1.5 查询数学成绩平均分
      • 3.5.2 分组函数
        • 3.5.2.1 查询男同学和女同学的各自平均分
        • 3.5.2.2 查询男同学和女同学的各自平均分,以及各自人数
        • 3.5.2.3 查询男同学和女同学的各自平均分,以及各自人数,要求分数低于80的不参与分组
        • 3.5.2.4 查询男同学和女同学的各自平均分,以及各自人数,要求分数低于80的不参与分组,分组之后人数大于2
    • 3.6 分页查询
      • 3.6.1 从0开始查询,查询第一页数据
      • 3.62 每页显示3条数据显示第一页
      • 3.6.3 每页显示3条数据显示第二页
      • 3.6.4 每页显示3条数据显示第三页
      • 3.6.5 每页显示4条数据显示第二页
    • 3.7 约束
      • 3.7.1 字段的约束
      • 3.7.2 演示主键约束,非空且唯一
      • 3.7.3 演示非空约束
      • 3.7.4 演示唯一约束
      • 3.7.5 对约束的操作
        • 3.7.5.1 删除约束
        • 3.7.5.2 添加约束
        • 3.7.5.3 外键约束(实例演示)
  • 4 外键
    • 4.1 外键的建立
      • 4.1.1 多对多关系
      • 4.1.2 一对一关系
    • 4.2 实例演示练习
      • 逆向化模型
  • 总结

前言

在这里插入图片描述
  本教程为常用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);

1.4.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 stu1	WHERE 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,/*员工id主键,且自增长*/
ename VARCHAR(32) UNIQUE,/*员工姓名,非空且唯一*/
joindate DATE NOT NULL,/*入职日期非空*/
salary DOUBLE(7,2) NOT NULL,/*薪水,非空*/
bonus DOUBLE(7,2) DEFAULT 0/*奖金,默认为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,/*员工id主键,且自增长*/
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;

4.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),/*介质(胶片,cd)*/
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,/*评分1-5*/
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 /*OUTER*/ 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 /*OUTER*/ JOIN dept ON emp.dep_id = dept.id;
```# 1 DDL

## 1.1  显示所包含的数据库

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

1.4.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 stu1	WHERE 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,/*员工id主键,且自增长*/
ename VARCHAR(32) UNIQUE,/*员工姓名,非空且唯一*/
joindate DATE NOT NULL,/*入职日期非空*/
salary DOUBLE(7,2) NOT NULL,/*薪水,非空*/
bonus DOUBLE(7,2) DEFAULT 0/*奖金,默认为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,/*员工id主键,且自增长*/
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;

4.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),/*介质(胶片,cd)*/
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,/*评分1-5*/
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 /*OUTER*/ 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 /*OUTER*/ JOIN dept ON emp.dep_id = dept.id;

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

http协议简介

http 1.简介 超文本传输协议&#xff08;HTTP&#xff0c;HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处…

Python实现GWO智能灰狼优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景灰狼优化算法(GWO)&#xff0c;由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能优…

【玩转c++】git的安装和使用以及可视化处理

本期主题&#xff1a;git的安装和使用&#xff08;windows环境&#xff09;博客主页&#xff1a;小峰同学分享小编的在Linux中学习到的知识和遇到的问题 小编的能力有限&#xff0c;出现错误希望大家不吝赐1.两个工具介绍第一个工具git&#xff0c;链接gitee或者github等代码托…

B端产品经理如何做好客户访谈?

用户访谈的价值我们在做用户研究的时候&#xff0c;经常会采用问卷调查和数据分析等定量的研究方法&#xff0c;从中我们可以搜集很多有价值的数据。但是&#xff0c;这些数据往往只停留在表层&#xff0c;没有办法基于用户的场景了解用户行为动机及诉求&#xff0c;很难找到用…

MySql的安装

版本选择 MySql目前使用最稳定的版本为5.7系列版本,尝鲜可以直接去官网链接整最新版本哦 本文使用8.0.32版本,注意这里看一下电脑位数,现在个人电脑一般都是64bit 点击223.6M那个压缩包开始下载,下面那个压缩包包含了测试相关内容一般是不需要的 这里有时会提示要你登录账户…

【REACT-@reduxjs/toolkit+react-redux+redux-persist状态管理】

REACT-reduxjs/toolkitreact-reduxredux-persist状态管理1. 依赖包安装2. 目录结构3. 修改Index.js4. createSlice&#xff08;&#xff09;4.1 action处理4.1.1 创建collapsedSlice4.1.2 使用collapsedSlice4.2 异步action处理4.2.1 使用redux-thunk方式处理异步4.2.1.1 创建a…

Java+MySQL汽车租赁管理系统课程设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;汽车租赁系统 获取完整源码源文件视频演示文档资料等 一、 课程设计目的 1、综合运用Java程序设计课程和其他相关课程的理论和知识&#xff0c;掌握面向对象程序设计的一般方法、常用技术及技巧&#xff0c;树立良好的软件…

MongoDB安装(新版本保姆级教程)

前言MongoDB 是一个文档数据库&#xff0c;旨在简化开发和扩展。本篇文章介绍MongoDB 数据库及其 可视化工具 MongoDB Compass 的详细教程 (window10操作系统)下载安装包首先进入官网(社区版) &#xff0c;在对应页面选择需要安装的版本 (这里下载当前适合版本号)传送门安装因为…

CRI-O, Containerd, Docker, Postman等概念介绍

参考&#xff1a;Docker&#xff0c;containerd&#xff0c;CRI&#xff0c;CRI-O&#xff0c;OCI&#xff0c;runc 分不清&#xff1f;看这一篇就够了Docker, containerd, CRI-O and runc之间的区别&#xff1f; Docker、Podman、Containerd 谁才是真正王者&#xff1f;CRI-O …

最简单的代码生成器,smartsofthelp netframework ,EF 架构

1.原生 sql操作公共类 dbhelper2.model 带注释的实体3.EF功能访问调用类3.EFData EF数据接口层4.UI展示层数据库脚本 自动生成Model /// <summary>/// Model实体层 /// </summary>namespace Smart.Model{/// <summary>/// 数据实体层 T_Eventsmart 投屏事件/…

CI/CD | 深入研究Jenkins后,我挖掘出了找到了摆脱低效率低下的方法

在本系列的第一篇文章中&#xff0c;您已经了解了一些关于如何管理Jenkins的内容&#xff0c;主要是为无序的人带来秩序。在这篇文章中&#xff0c;我将更深入地探讨我效率低下的问题&#xff0c;提出我们工作流中一些安全性、治理和合规性的挑战。这不仅仅是你在网站上或展览横…

从此不怕被盗号:教你如何用 Python 制作一个密码生成器

原由&#xff1a; 定期更换密码是一种非常重要的安全措施&#xff0c;这种做法可以有效地保护你的账户和个人信息不受黑客和网络攻击者的侵害。 密码泄露是一个非常普遍的问题&#xff0c;许多人的账户和密码经常会被泄露出来&#xff0c;导致个人信息被盗用、金融损失、恶意…

hive建分区表,分桶表,内部表,外部表

hive建分区表&#xff0c;分桶表&#xff0c;内部表&#xff0c;外部表 一、概念介绍 Hive是基于Hadoop的一个工具&#xff0c;用来帮助不熟悉 MapReduce的人使用SQL对存储在Hadoop中的大规模数据进行数据提取、转化、加载。Hive数据仓库工具能将结构化的数据文件映射为一张数…

Redis 如何实现库存扣减操作和防止被超卖

在日常开发中有很多地方都有类似扣减库存的操作&#xff0c;比如电商系统中的商品库存&#xff0c;抽奖系统中的奖品库存等。其基本的流程如下:1 解决方案使用mysql数据库&#xff0c;使用一个字段来存储库存&#xff0c;每次扣减库存去更新这个字段。还是使用数据库&#xff0…

自动视觉锁螺丝机及其控制系统

1.全自动智能锁螺丝机的意义电子消耗品、家用电器、汽车零件、音箱、安防、玩具、LED 等制造业的生产过程中&#xff0c;产品组装是一个非常重要的步骤&#xff0c;而螺丝锁付是组装过程的核心工艺之一。当下国内智能手机、智能汽车、智能家电等产品更新换代快&#xff0c;产品…

深入理解C#的协变和逆变及其限制原因

阅读本文需要的一些前置知识&#xff1a; C#基本语法、C#的泛型使用、C#的运行过程 由于协变和逆变存在一些细节&#xff0c;在阅读时请注意“接口”和“类型”的差异&#xff0c;此外&#xff0c;文中有可能在不同的语境中将“结构体”和“值类型”混用&#xff0c;但表达的同…

JavaEE简单实例——MyBatis一对多关联映射的嵌套结果集查询

简单介绍&#xff1a; 在之前的章节&#xff0c;我们简单介绍了MyBatis中的一对一的关联查询&#xff0c;使用了嵌套查询和嵌套结果集两种方式进行讲解&#xff0c;但是在实际的使用中&#xff0c;我们常用的是嵌套结果集的查询方式&#xff0c;所以在一对多的查询中&#xff…

无线耳机哪个品牌音质好?2023无线蓝牙耳机音质排行

现今&#xff0c;外出佩戴蓝牙耳机的人越来越多&#xff0c;各大品牌厂商对于蓝牙耳机各种性能的设计也愈发用心。那么&#xff0c;无线耳机哪个品牌音质好&#xff1f;下面&#xff0c;我来给大家推荐几款音质好的无线蓝牙耳机&#xff0c;可以当个参考。 一、南卡小音舱蓝牙…

【人工智能】科大讯飞API接口调用(第一集)

前言 这学期有一门人工智能教育课程&#xff0c;恰巧又有这么一个实践&#xff0c;要求进行人工智能接口调用 于是首选了科大讯飞&#xff0c;下面是详细过程记录 科大讯飞接口调用 以下是流程以及实现细节描述 调用流程 第一步 来到科大讯飞开放平台 http://www.xfyun.…

四、阻塞队列

文章目录基础概念生产者消费者概念JUC阻塞队列的存取方法ArrayBlockingQueueArrayBlockingQueue的基本使用生产者方法实现原理ArrayBlockingQueue的常见属性add方法实现offer方法实现offer(time,unit)方法put方法消费者方法实现原理remove方法poll方法poll(time,unit)方法take方…