当前位置: 首页 > news >正文

数据库=====

创建数据库
1.直接创建数据库
语法:CREATE DATABASE [IF NOT EXISTS] 数据库名 ——[]表示内部内容可省略
2.指定字符集和排序规则方式创建数据库
语法:CREATE DATABASE[IF NOT EXISTS] 数据库名 CHARACTER SET 字符集 COLLATE 排序规则
示例:CREATE DATABASE mydb4 CHARACTER SET UTF8 COLLATE utf8_bin
排序规则说明
utf8字符集中指定的 utf8_general_ci 和 utf8_bin,对数据库中存储数据库的规则就有所不同。
utf8_general_ci:ci是 case insensitive, 即 “大小写不敏感”, a 和 A 会在字符判断中会被当做一样的。
utf8_bin:将字符串每个字符串用二进制数据编译存储,区分大小写,而且可以存二进制的内容。
查看数据库
1.修改数据库:只能修改数据库的字符集和排序规则,不能修改数据库名字
语法:ALTER DATABASE 数据库名 CHARACTER SET 字符集 [COLLATE 排序规则]
2.删除数据库
语法:DROP DATABASE 数据库名
使用数据库
1.切换数据库
语法:USE 数据库名
1.数值类型
a)整数类型
如要使用无符号的,在建表语句中指定。例如:id int unsigned
b)浮点数
MySQL中的浮点数包括float和double两种,定义格式为float(M,D)、double(M,D)。
2.字符串类型
MySQL提供了多种针对字符串的存储类型。如下表所示
字符串类型 取值范围和存储需求
char(M) M为0~255之间的整数
varchar(M) M为0~65535之间的整数
text 允许长度0~65535字节
enum 允许的值选自一个允许值列表,这个列表最多能存储的值数量为65535个
set 和enum类似,set类型是一个多选字符串数据类型
a)char和varchar
这两种类型的主要区别在于存储方式不同,char类型的长度是固定的,而varchar类型的长度是可变的。因为长度的问题,所以导致两种数据类型的数据寻址速度不同,如果字符在10个以内,推荐使用char。
3.日期和时间类型
MySQL中有多种日期和时间类型的数据数据类型。如下表所示
类型 字节 最小值 最大值
date 4 1000-01-01 9999-12-31
datetime 8 1000-01-01 00:00:00 9999-12-31 23:59:59
time 3 -838:59:59 838:59:59
year 1 1901 2155
1、如果要表示年月日,通常使用date。如果要表示年月日时分秒,通常使用datetime。
2、如果要表示时分秒,通常使用time。如果要表示年,通常使用year。
最常用类型总结:整数 int 、 浮点数 double 、字符串 varchar、日期 date。
创建表示例
注意:在创建表之前,一定要先使用数据库USE 数据库名(也就是说,表一定要创建在某个数据库中)
需求:创建employee表,包含字段,编号(id int)、姓名(emp_name varchar)、性别(gender enum(‘M’,’F’))、 入职日期(hire_date date)、薪资(salary double)、简历(resume text)
create table employee(
id int,
emp_name varchar(100),
gender enum(‘M’,’F’),
hire_date date,
salary double,
resume text
) engine InnoDB auto_increment 01 default charset UTF8 collate utf8_bin;
三、查看表
1.查看表结构 查看创建表的SQL语句
语法:DESC 表名; 语法:SHOW CREATE TABLE 表名;
2.添加新列
语法:ALTER TABLE 表名 ADD 列名 类型
示例:为学生表s1添加一个新的字段remark,类型为varchar(20)
ALTER TABLE s1 ADD remark VARCHAR(20);
3.修改列类型
语法:ALTER TABLE 表名 MODIFY 列名 新的类型
示例:将s1表中的remark字段的改成varchar(100)
ALTER TABLE s1 MODIFY remark VARCHAR(100)
4.修改列名
语法:ALTER TABLE 表名 CHANGE 旧列名 新列名 类型
示例:将s1表中的remark字段名改成intro,类型varchar(30)
ALTER TABLE s1 CHANGE remark intro varchar(30)
5.删除列
语法:ALTER TABLE 表名 DROP 列名
示例:删除s1表中的字段intro
ALTER TABLE s1 DROP intro
6.修改表名
语法:RENAME TABLE 表名 TO 新表名
示例:将学生表student改名成student2
RENAME TABLE student TO student2
7.修改表字符集
语法:ALTER TABLE 表名 character set 字符集
示例:将sutden2表的编码修改成gbk
ALTER TABLE student2 character set gbk
alter table student convert to character set utf8;
六、删除表
语法:DROP TABLE 表名
示例:删除s1表
drop table s1
DML数据操纵语言
1.指定字段的插入
语法:INSERT INTO 表名 (字段名 1, 字段名2…,字段n) VALUES (值1, 值2…,值n)
示例:更换数据库,创建student表
create table student(
id int,
name varchar(20),
age int,
sex char(1),
address varchar(100)
)
向学生表中添加 id, name, age, sex数据
INSERT INTO student (id, name, age, sex) VALUES (1, ‘张三’, 20, ‘男’);
示例2:向student表中插入数据
INSERT INTO student (NAME, id, age, sex, address) VALUES (‘李四’, 2, 23, ‘女’, ‘广州’);
注意事项
值与字段必须对应,个数相同,类型相同;值的数据大小必须在字段的长度范围内 varchar();除了数值类型外,其它的字段类型的值必须使用引号引起(建议单引号);如果要插入空值,可以不写字段,或者插入null
2.不指定字段的插入
语法:INSERT INTO 表名 VALUES (值1, 值2…)
示例:INSERT INTO student VALUES (3, ‘王五’, 18, ‘男’, ‘北京’);
注意事项:不指定列时,相当于指定了所有列,顺序和建表时的顺序一致。
1.不带条件的更新
语法:UPDATE 表名 SET 字段1=值1[,字段2=值2,…,字段n=值n]
示例:UPDATE student SET sex=‘女’
说明:表中所有行的sex都会被更新为女
2.带条件的更新
语法:UPDATE 表名 SET 字段1=值1[,字段2=值2,…,字段n=值n][where 条件]
示例:将id号为2的学生性别改成男
UPDATE student SET sex=‘男’ WHERE id=2;
说明:where 条件有很多种,在后面的查询中逐个讲解。
三:删除记录
1.带条件删除
语法:DELETE FROM 表名 WHERE 条件
示例:带条件删除数据,删除id为3的记录
DELETE FROM student WHERE id=3
2.不带条件删除
语法:DELETE FROM 表名
示例:DELETE FROM student;
说明:不带条件的删除,将删除表中的全部数据。
DQL数据查询语言
1.简单查询
a)查询表中全部数据
语法:SELECT * FROM 表名
示例:SELECT * FROM student
b)查询指定列
语法:SELECT 字段名1, 字段名2… FROM 表名
示例:查询student表中的name 和 age 列
SELECT NAME, age FROM student
二、别名查询
在查询时,给查询的列或表起一个其他的(一般是稍短的名字,或为了防止重复)名字就叫做别名。使用别名的好处是方便查看和处理查询到的数据。
语法:SELECT 字段名1 AS 别名, 字段名2 AS 别名… FROM 表名;
SELECT 字段名1 AS 别名, 字段名2 AS 别名… FROM 表名 AS 表别名
示例:查询sudent表中name 和 age 列,name列的别名为”姓名”,age列的别名为”年龄”
SELECT NAME AS ‘姓名’, age AS ‘年龄’ FROM student;
示例2:查询sudent表中name和age列,student表别名为s
SELECT NAME, age FROM student AS s;
AS关键字可以省略。
三、去除重复值
语法:SELECT DISTINCT 字段名 FROM 表名
示例:SELECT DISTINCT name FROM student
说明:当distinct后出现了多个列时,只有当多个列的数据都重复才叫重复数据。
四、查询结果参与运算
在查询语句中,查询的列的可以和其他值做数学运算(加、减、乘、除等)。运算结果只会影响展示,不会影响表中的数据。
语法:SELECT 列名1 + 固定值 FROM 表名
SELECT 列名1 + 列名2 FROM 表名
示例:查询student表中每条记录添加对应的数学和英语成绩
查询math + english的和: SELECT math + english FROM student
查询math + english的和,并使用别名”总成绩”: SELECT math + english ‘总成绩’ FROM student
查询所有列与math + english的和,并使用别名”总成绩”:SELECT , math + english ‘总成绩’ FROM student
查询姓名、年龄,将每个人的年龄增加10岁: SELECT name, age + 10 FROM student
五、条件查询
1、比较运算符
=等于、 >大于、 <小于、 <=小于等于、 >=大于等于、 <>或!=不等于
示例:查询math分数大于80分的学生
SELECT * FROM student3 WHERE math>80
2、逻辑运算符
and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足
示例1:查询age大于35且性别为男的学生(两个条件同时满足)
SELECT * FROM student3 WHERE age>35 AND sex=‘男’;
示例2:查询id是1或3或5的学生
SELECT * FROM student3 WHERE id=1 OR id=3 OR id=5;
3、指定范围内查询 in
语法:SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2…);
示例:查询id是1或3或5的学生
SELECT * FROM student3 WHERE id IN (1,3,5)
说明:相当于使用or连接多个条件id=1 OR id=3 OR id=5。
4、范围
比如:age BETWEEN 80 AND 100 相当于: age>=80 and age<=100
示例:查询english成绩大于等于75,且小于等于90的学生
SELECT * FROM student3 WHERE english>=75 AND english<=90;
SELECT * FROM student3 WHERE english BETWEEN 75 AND 90;
5、模糊查询like
语法:SELECT * FROM 表名 WHERE 字段名 like ‘通配符字符串’;
MySQL通配符有两个:
%: 表示0个或多个字符(任意个字符)
: 表示一个字符
示例1:查询姓马的学生
SELECT * FROM student3 WHERE NAME LIKE ‘马%’;
示例2:查询姓名中包含’德’字的学生
SELECT * FROM student3 WHERE NAME LIKE ‘%德%’;
示例3:查询姓马,且姓名有三个字的学生
SELECT * FROM student3 WHERE NAME LIKE '马
_';
6、为空查询 is null
示例:查询english成绩时null的学生信息
select * from student3 where english is null
DQL数据查询语言
一、排序
通过ORDER BY子句,可以将查询出的结果进行排序,排序只影响显示结果,不会影响数据库中数据的顺序。
语法:SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名 [ASC|DESC];
ASC: 升序,默认是升序
DESC: 降序
1.单列排序
单列排序是使用一个字段排序。
示例:查询所有数据,使用年龄降序排序:
SELECT * FROM student3 ORDER BY age DESC;
2.组合排序
组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。 上面的例子中,年龄是有相同的。当年龄相同再使用math进行排序。
语法:SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名1 [ASC|DESC],字段名2 [ASC|DESC];
示例:查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序:
SELECT * FROM student3 ORDER BY age DESC, math DESC;
二、聚合函数
聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。
聚合函数会忽略空值。
count: 统计指定列记录数,记录为NULL的不统计
sum: 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max: 计算指定列的最大值
min: 计算指定列的最小值
avg: 计算指定列的平均值,如果不是数值类型,那么计算结果为0
1.count函数
统计指定列记录数
示例1:查询总条数
SELECT COUNT(
) FROM student3;
示例2:查询年龄大于40的总人数
SELECT COUNT() FROM student3 WHERE age>40;
说明:先查询后进行聚合函数统计
示例3:SELECT COUNT(english) FROM student3
2.sum函数
计算指定列的数值和,如果不是数值类型,那么计算结果为0
示例:计算math的总和
SELECT SUM(math) FROM student3;
3.avg函数
计算指定列的平均值,如果不是数值类型,那么计算结果为0
示例:查询数学成绩平均分
SELECT AVG(math) FROM student3;
4.max函数
计算指定列的最大值
示例:查询数学成绩最高分
SELECT MAX(math) FROM student3;
5.min函数
计算指定列的最小值
示例:查询数学成绩最低分
SELECT MIN(math) FROM student3;
四、分组
分组查询是指使用 GROUP BY语句对查询信息进行分组,相同数据作为一组。
语法:SELECT 字段1,字段2… FROM 表名 GROUP BY 分组字段 [HAVING 条件];
1.分组查询
GROUP BY怎么分组的?将分组字段结果中相同内容作为一组
示例1:SELECT * FROM student3 GROUP BY sex;
这句话会将sex相同的数据作为一组。
第一步:将sex相同的数据作为一组,分为男,女两组。
第二步:返回每组的第一条数据,作为查询结果。
说明:以上的操作是将分组字段结果中相同内容作为一组,并且返回每组的第一条数据。这样的操作显然没有什么意义。分组的目的就是为了统计,一般分组会跟聚合函数一起使用。
示例1:SELECT SUM(math), sex FROM student3 GROUP BY sex;
是将每组的math进行求和,返回每组统计的结果。 聚合函数是在分组后运行,统计每组的数据
注意事项:当我们使用某个字段分组,在查询的时候最好将这个字段查询出来,否则看不到数据属于哪组的。
示例3:查询男女各多少人
SELECT sex, COUNT(
) FROM student3 GROUP BY sex;
2.分组时的条件过滤
示例1:查询年龄大于25岁的人,按性别分组,统计每组的人数
先过滤掉年龄小于25岁的人;再分组;最后统计每组的人数
SELECT sex, COUNT() FROM student3 WHERE age > 25 GROUP BY sex;
一个SQL语句中不应该出现两个where子句!
使用having子句解决
示例:SELECT sex, COUNT(
) FROM student3 WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2;
只有有分组后人数大于2的这组数据显示了出来。
3.where和having的对比
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having语句中可以使用聚合函数,where后面不可以使用聚合函数
五、limit
LIMIT的作用是限制查询记录的条数。
注意:limit子句要放在SQL语句的最后
LIMIT语法格式
LIMIT offset,length;或者limit length;
offset是指偏移量,可以认为是跳过的记录数量,默认为0,表示从哪开始
length是指需要显示的总记录数,表示显示几条
示例:查询学生表中数据,从第三条开始显示,显示6条。
SELECT * FROM student3 LIMIT 2,6;
SQL语句如下
– 每页显示5条
– 第一页: LIMIT 0,5; 跳过0条,显示5条
– 第二页: LIMIT 5,5; 跳过5条,显示5条
– 第三页: LIMIT 10,5; 跳过10条,显示5条
SELECT * FROM student3 LIMIT 0,5;
SELECT * FROM student3 LIMIT 5,5;
SELECT * FROM student3 LIMIT 10,5;
SELECT * FROM table_name LIMIT 行数(可以是百分比) OFFSET 偏移量(可以是百分比)
注意
1、如果第一个参数是0可以简写; LIMIT 10,5; – 如果不够5条,则有多少显示多少。
约束和策略
1、主键的作用:用来唯一标识一条记录,每个表都应该有一个主键
通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键没有含义没有关系。
2、创建主键
a)建表时添加主键
示例1:create table stu1(
id int primary key auto_increment,
name varchar(20)
)
示例2:create table stu1(
id int ,
name varchar(20),
primary key(id) auto_increment
)
b)修改表方式添加主键
alter table stu1 add CONSTRAINT stu1_pk primary key(id)
stu1_pk 约束名,可有可无
组合主键
CREATE TABLE 销售 (
商品编号 VARCHAR(5) ,
顾客编号 VARCHAR(5) ,
PRIMARY KEY(商品编号,顾客编号),
购买数量 INT,
购买日期 date
);
或者先创建表,然后
ALTER TABLE 销售;
ADD PRIMARY KEY (商品编号, 顾客编号);

3、删除主键
语法:ALTER TABLE 表名 DROP PRIMARY KEY;
示例:删除stu1表的主键
ALTER TABLE stu1 DROP PRIMARY KEY;
4、主键自增策略
自增关键字auto_increment。默认地AUTOINCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL
语法:ALTER TABLE 表名 AUTOINCREMENT=起始值;
二、非空约束
1、建表时添加非空约束
字段名 字段类型 NOT NULL
CREATE TABLE stu3 (
id int,
name varchar(20) NOT NULL,
);
2、修改表的方式添加非空约束
alter table stu3 modify name varchar(20) not null
三、唯一约束
添加了唯一约束的列的值不能重复,但是可以为null。
1、创建唯一约束
a)建表时添加唯一约束
语法:列名 数据类型 UNIQUE
示例:CREATE TABLE stu4 (
id INT primary key,
email varchar(200) unique
)
b)修改表方式添加唯一约束
alter table stu4 add constraint stu4_unq unique(email) stu4_unq是约束名,可以省略
2、删除唯一约束
语法:alter table 表名 drop index 唯一约束的约束名
示例:alter table stu4 drop index stu4_unq
四、缺省(默认)约束
缺省约束是指指定某个列的缺省值,当该列在插入数据时不指定值,将会使用缺省值。
1、创建缺省约束
a)建表时添加缺省约束
语法:列名 数据类型 default ‘缺省值’
示例:CREATE TABLE stu5 (
id INT primary key,
address varchar(200) default ‘北京’
)
b)(2)修改表的方式添加缺省约束
alter table stu5 change column address address varchar(200) default ‘北京’;
2、删除缺省约束
语法:alter table 表名 change column 列名 列名 数据类型 default null
示例:alter table stu5 change column address adress varchar(200) default null
五、外键约束
1、单表的缺点
创建一个员工表,包含如下列(id, name, age, depname, deplocation) ,id主键并自动增长,添加6条数据
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES (‘张三’, 20, ‘研发部’, ‘广州’); …
INSERT INTO emp (NAME, age, dep_name, dep_location) VALUES (‘小王’, 18, ‘销售部’, ‘深圳’); …
缺点:表中出现了很多重复的数据(数据冗余),如果要修改研发部的地址需要修改3个地方。
2、解决方案
将一张表分成2张表(员工表和部门表) ,使用外键约束。
3、什么是外键约束
一张表中的某个字段引用另一个表的主键。
主表: 约束别人的表 副表/从表: 使用别人的数据,被约束的表
4、创建外键
a)建表时创建外键约束
语法:[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
关键字解释:
CONSTRAINT:约束关键字
FOREIGN KEY(外键字段名):某个字段作为外键
REFERENCES 主表名(主键字段名):表示参照主表中的某个字段
要求:外键列的数据类型和长度必须和被参照的主键列的数据类型和长度一致
示例:在创建副表/从表之前要先创建主表
CREATE TABLE department (
id INT PRIMARY KEY AUTO_INCREMENT,
dep_name VARCHAR(20),
);
副表/从表: 被别的表约束,表结构添加外键约束
CREATE TABLE employee (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
dep_id INT,
– 添加一个外键
– 外键取名公司要求,一般fk结尾
CONSTRAINT emp_depid_ref_dep_id_fk FOREIGN KEY(dep_id) REFERENCES department(id));
b)修改表的方式添加外键
alter table employee add constraint emp_fk1 foreign key(dept_id) reference department(id)
5、外键的级联
a)问题
要把部门表中的id值2,改成5,能不能直接修改呢?
UPDATE department SET id=5 WHERE id=2;
如果副表(员工表)中有引用的数据,不能直接修改主表(部门表)主键。
要删除部门id等于1的部门,能不能直接删除呢?
DELETE FROM department WHERE id=1;
如果副表(员工表)中有引用的数据,不能直接删除主表(部门表)数据。
b)级联操作
在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作。
语法:ON UPDATE CASCADE – 级联更新,主键发生更新时,外键也会更新
ON DELETE CASCADE – 级联删除,主键发生删除时,外键也会删除
示例:创建employee表,添加级联更新和级联删除 //在副表中
CREATE TABLE employee (
id INT PRIMARY KEY AUTO_INCREMENT,
– 添加外键约束,并且添加级联更新和级联删除
CONSTRAINT employee_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE
CASCADE
);
注意:要慎用级联操作
多表查询
一、什么是多表查询
同时查询多张表获取到需要的数据,就是多表查询。
二、笛卡尔积
1.什么是笛卡尔积现象
多表查询时左表的每条数据和右表的每条数据组合,这种效果成为笛卡尔积。
语法:select * | 列1,列2,…,列n from 表1,表2,…,表n
示例:需求:查询部门和员工信息
SELECT * FROM dept, emp;
以上数据其实是左表的每条数据和右表的每条数据组合。左表有3条,右表有5条,最终组合后3*5=15条数据。
左表的每条数据和右表的每条数据组合,这种效果称为笛卡尔乘积,笛卡尔积中有很多没有意义的数据。
三、连接查询
1.内连接
用左边表的记录去匹配右边表的记录,符合条件的才显示。内连接又分为隐式内连接和显示内连接两种。
a)隐式内连接
隐式内连接:不使用JOIN关键字,条件使用WHERE指定。
语法:SELECT 字段名 FROM 左表, 右表 WHERE 条件
b)显示内连接

2.外连接
a)左外连接
左表数据全部显示,右表显示和左表有关联的数据。
语法:SELECT 字段名 FROM 左表 LEFT OUTER JOIN 右表 ON 条件。OUTER可以省略
用左边表的记录去匹配右边表的记录,如果符合条件的则显示;否则,显示NULL。

b)右外连接
右外连接:使用RIGHT OUTER JOIN … ON,OUTER可以省略。右表数据全部显示,左表显示和右表有关联的数据。
语法:SELECT 字段名 FROM 左表 RIGHT OUTER JOIN 右表 ON 条件;

子查询
查询中嵌套一个查询叫子查询

a)单行子查询
子查询的结果是一个值
单行运算符:= > >= < <= != 等我们学习过的众多运算符都是单行运算符
示例:查询工资比白骨精高的员工信息
select * from emp where salary>(select salary from emp where name=‘白骨精’)
子查询先查询出’白骨精’的工资,作为条件交给主查询使用
b)多行子查询
子查询结果是单例多行
多行运算符:in、any、all
示例:1、查询工资大于5000的员工,来自于哪些部门的名字
先查询大于5000的员工所在的部门id
SELECT dept_id FROM emp WHERE salary > 5000
再查询在这些部门id中部门的名字
SELECT dept.name FROM dept WHERE dept.id IN (SELECT dept_id FROM emp WHERE salary > 5000)
2、查询开发部与财务部所有的员工信息
先查询开发部与财务部的id
SELECT id FROM dept WHERE NAME IN(‘开发部’,‘财务部’);
再查询在这些部门id中有哪些员工
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME IN(‘开发部’,‘财务部’))
any 和 all 不是单独使用的运算符,要和 比较运算符一起使用
示例:修改表中数据,把蜘蛛精的name修改为白骨精
select salary from emp where name=‘白骨精’
any表示任意值
select name,salary from emp where salary >any(select salary from emp where name=‘白骨精’)

any表示比最小的大就可以(大于4500)
all表示全部值
select name,salary from emp where salary >all(select salary from emp where name=‘白骨精’)
all 表示比最大的还要大(大于5000)
c)多列子查询
子查询结果是单列,在WHERE后面作为条件 子查询结果
子查询结果是多列,肯定在FROM后面作为表
语法:SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件
子查询结果只要是多行多列,肯定在FROM后面作为表 。
子查询作为表需要取别名,否则这张表无法访问表中的字段。
示例:查询出2011年以后入职的员工信息,包括部门名称
在员工表中查询2011-1-1以后入职的员工
SELECT * FROM emp WHERE join_date > ‘2011-1-1’
查询所有的部门信息,与上面的虚拟表中的信息组合,找出所有部门id等于的dept_id
SELECT e.id emp_id,e.name emp_name,e.gender emp_gender,e.salary emp_salary,e.join_date
emp_join_date,d.id dept_id,d.name dept_name FROM dept d, (SELECT * FROM emp WHERE join_date >
‘2011-1-1’) e WHERE e.dept_id = d.id

相关文章:

  • 数字信号处理学习笔记--Chapter 0 数字信号处理概述
  • 【深度学习】典型的 CNN 网络
  • 力扣-字符串-165 比较版本号
  • P4552 [Poetize6] IncDec Sequence 题解
  • 玩转Docker | 使用Docker部署AI证件照工具
  • ARM 算数指令
  • 鼠标悬浮特效:常见6种背景类悬浮特效
  • 如何在 CentOS 7 命令行连接 Wi-Fi?如何在 Linux 命令行连接 Wi-Fi?
  • 蟋蟀的叫声,大自然的温度计
  • 网络Tips20-002
  • 多多铃声 7.4| 拥有丰富的铃声曲库,满足不同用户的个性化需求,支持一键设置手机铃声
  • 多把锁以及线程死锁问题
  • Spring AI 实战:第三章、Spring AI结构化输出之告别杂乱无章
  • 【RocketMQ NameServer】- NameServer 启动源码
  • 如何设计抗Crosstalk能力强的PCB镀穿孔
  • 一种基于重建前检测的实孔径雷达实时角超分辨方法——论文阅读
  • ROS2安装简明教程
  • 算力经济模型研究:从云计算定价到去中心化算力市场设计
  • Linux时钟与时间API
  • spring2.x详解介绍
  • 重庆动物园大熊猫被游客扔玻璃瓶,相同地方曾被扔可乐瓶
  • 李云泽:房地产“白名单”贷款审批通过金额增至6.7万亿元
  • 重庆荣昌机关食堂五一期间受热捧:肉类总消耗2万斤,单日吃卤鹅800只
  • 特朗普要征电影关税惊扰全球电影业,“让好莱坞再次伟大”或现反效果
  • 晒被子最大的好处,其实不是杀螨虫,而是……
  • 当AI开始谋财害命:从骗钱到卖假药,人类该如何防范?