数据库_初识mysql
E-R模型
entity- relationship实体与关系之间的的关系
desc --describe-----describe 单个的一个表名字. show tables是显示所有的建立在这个库中的表格
数据表完整性
use db_library;show tables;create table r_reader1(reader_id int not null,reader_name varchar(50),reader_sex char(2) default"男",
reader_birthday date,
reader_borrowtotal int);
describe r_reader1;
describe r_return_record;
alter table r_return_record modify return_data date not null;
desc r_return_record;
alter table r_return_record modify return_id char(9) default "齐渊强";
desc r_return_record;
show tables;
create table t_reader2(
reader_id int unique auto_increment,
reader_name varchar(50),
reader_sex char(2) default"男",
reader_birthday date,
reader_borrowtotal int);
describe r_reader1;
alter table r_reader1 modify reader_id int unique auto_increment;
desc r_reader1;
insert into r_reader1(reader_name) values("清华大学出版社");
insert into r_reader1(reader_name) values("天津工业大学出版社");
select *from r_reader1;
show tables;
create table t_press(
press_id int not null unique auto_increment,
perss_name varchar(50),
perss_wbiste varchar(50),
perss_telephone int(11),
perss_email varchar(20),
perss_address varchar(230),
perss_postcode char(6));
desc t_press;
alter table t_press modify press_id int;
desc t_press;
alter table t_press drop index press_id;
desc t_press;
alter table t_press add primary key (press_id);
describe t_press;
desc r_return_record;
create table t_book(
isbn char(12),
book_name varchar(32),
book_author varchar(32),
book_price decimal(6,1),
press_id char(3),
book_copy int(34),
book_inventory int(22));
describe t_book;
alter table t_press modify press_id char(3);
alter table t_book add constraint fk_pressid foreign key (press_id) references t_press (press_id);
desc t_book;
insert into t_press(press_id) values("11");
insert into t_press(press_id) values("43");
desc t_book;
desc t_pess;
select * from t_press;
insert into t_book (isbn,press_id) values ("erwee rwer ","43");
select * from t_book;
2021-5-13 黑马数据库学习 DataBase
1SQL
数据库学习
DataBase
1 SQL structured Query Languge
Sql 的通用语法
DDL(操作数据库,表);
DML(增删改查);
DQL(查询);
DCL(授权的);
DDL :
对库的crud: create; updata; delete; retrieve;
crud: create; updata; delete; retrieve;
对库的crud:1exists;存在:是否不存在表(创建表时): create database if not exists db4 character set utf8;删除一个表时(是否存在): drop database if exists db4;
对表的crud;
select database<>;
score double(5,2);datatime :data , datatime,timestamp;时间戳varchar;name varchar(33);
delete from stu; 删除表中所有的.(不推荐)
TRUNCATE TABLE stu;删除一个表完全,并且创建一个空表.
truncate betwwen
5.15号
修改列名字
**
ALTER TABLE emp CHANGE dept_date dept_id INT;**SE db1;
INSERT INTO stu(id,NAME,age) VALUES(3,'张',33);
SELECT * FROM stu;
INSERT INTO stu VALUES (1,'张无',32,NULL,NULL,34);
INSERT INTO stu VALUES (2,'张三丰',32,"2322-11-22",NULL,34);
DELETE FROM stu WHERE id =1;
TRUNCATE TABLE stu;-- update 不用 table
UPDATE stu SET age = 113, score = 130 WHERE id =2;
SELECT * FROM stu;
SELECT id FROM stu;
CREATE TABLE student(
id INT,
age INT,
sex VARCHAR(23),
address VARCHAR(34),
math DOUBLE,
english DOUBLE
);
INSERT INTO student VALUES(8,32,"男","北京",2,98);
INSERT INTO student VALUES(9,35,"女","天津难",21,25);
INSERT INTO student VALUES(7,53,"女","天津",67,54);
`student``stu``student`
SELECT DISTINCT address FROM student;
SELECT DISTINCT NAME ,address FROM student;
SELECT id,math AS T恤,math +IFNULL(english,0) AS 总共 FROM student;
SELECT * FROM student WHERE id <>3;
--查询年龄在20-30的;
SELECT * FROM student WHERE id >1 AND id <3;
SELECT * FROM student WHERE id BETWEEN 1 AND 3;
SELECT * FROM student WHERE id =1 OR id =3 OR id =4;
SELECT * FROM student WHERE id IN(1,3,4);
SELECT * FROM student WHERE english IS NOT NULL ;
SELECT * FROM student WHERE age LIKE '_2%';
SELECT * FROM student WHERE address LIKE'%津%'
;
*SELECT FROM student ORDER BY english ASC ,math ASC ;–ASc升序,desc降序,两个排序的时候就当第一个条件相同时,按照第二个规则
一下函数
SELECT COUNT(english) FROM student; --合函数排除了null.不计入里面.SELECT COUNT(IFNULL(math,1)) FROM student;
SELECT *FROM student;
SELECT COUNT(*)FROM student;
SELECT MIN(math) FROM student;
SELECT SUM(english) FROM student;
SELECT AVG(math) FROM student;
5.16----------------------------
SELECT *FROM student ORDER BY english ASC ,math ASC ;–ASc升序,desc降序,两个排序的时候就当第一个条件相同时,按照第二个规则
聚合函数: count(),sum(),max(),min(),avg();
**分组查询:**group
group
SELECT sex,AVG(math) , COUNT(id) FROM student GROUP BY sex ;
– 写count聚合函数就行,group
-- 1分组函数的前面不要写基本列除了分组的那个,sex,
select count(id) from emp Group by dept_id;
SELECT gender ,SUM(salary) FROM emp GROUP BY gender ;
1譬如这个.前面写了name.但是不会出来所有人,只会出来两个名字,因为分组的性别就是两个
SELECT NAME ,SUM(salary) FROM emp GROUP BY gender ;
select gender,sum(salary) from emp
where gender = '男'group by gender
havingsum(salary) >500
;
外键
constraint 连接constraint; foreign key
1外键: 格式- constraint 外键名称 foreign key (外键列名称) reference 主表名称(主表列名称)
constraint empl_depa_fk foreign key employee_id reference department(department_id);
2删除外键
- 删除外键
ALTER TABLE employee DROP FOREIGN KEY emlp_depa_fk;
– 添加外键(不是修改)
ALTER TABLE employee ADD CONSTRAINT empl_depa_fk FOREIGN KEY employee_id reference department(department_id);
------------5.16号
SELECT sex,AVG(math) , COUNT(id) FROM student GROUP BY sex ;
– 写count聚合函数就行,group
-- 分组函数的前面不要写基本列除了分组的那个,sex,,也可以写,没啥用好像
/*select sex,Avg(math), count(id) from student where math > 2 group by sex having count(id)>2;
/–where 和having的区别:where在之前限定,若不满足则不参与分组 ,
having在之后,都会参与,只是是否会显示
–2:where之后不能跟聚合函数,having可以跟;
SELECT sex,AVG(math), COUNT(id)个数 FROM student WHERE math > 2 GROUP BY sex HAVING 个数>2;
/
/
–分页查询
limit
*/
SELECT * FROM student LIMIT 0,3; – 第一页
SELECT * FROM student LIMIT 3,3; – 第二页
/*公式:开始的索引 = (当前的页码-1)*每页显示的条数
limit是一个"方言",只在mysql中有.
*/
/*
约束
主键约束 primary key ;
非空约束 not null
唯一性; unique
外键约束: foreign key; foreign
not null
*/
CREATE TABLE stu1(
id INT,
NAME VARCHAR(20) NOT NULL /–非空/
);
SELECT FROM stu1;
– 1非空的删除,比较正规的看起来***
ALTER TABLE stu1 MODIFY NAME VARCHAR(20);
2添加非空:
ALTER TABLE stu1 ADD address VARCHAR(21) NOT NULL;
DROP TABLE stu1;
CREATE TABLE stu1 (
id INT,
phone_number INT UNIQUE); – 唯一性
SELECT * FROM stu1;
INSERT INTO stu1 VALUES (1,23);
INSERT INTO stu1 VALUES (2,3);
db1
– 删除唯一性约束(不一样)
– 注意!!!
ALTER TABLE stu1 DROP INDEX phonenuber(唯一性修饰的列名字);
不能用modify删除
/*
主键
- primary key 非空且唯一
- 表中的唯一
*/
– 主键的删除
ALTER TABLE stu1 DROP PRIMARY KEY;
不能用modify删除
– 创建字段之后添加主键功能
ALTER TABLE stu1 MODIFY id INT PRIMARY KEY;
/*
自动增长
auto_increment;
*/
CREATE TABLE stu2(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20));
– 自动增长的删除
ALTER TABLE stu2 MODIFY id INT;
– 添加
ALTER TABLE stu2 MODIFY id INT AUTO_INCREMENT;
SELECT * FROM stu2;
CONSTRAINT
外键
如果一张表中有一个非主键的字段指向了另一张表中的主键,就将该字段叫做外键。一张表中外键可以有多 个, 也就是不同字段指向了不同表中的主键
如果一张表中有一个非主键的字段指向了另一张表中的主键,就将该字段叫做外键。一张表中外键可以有多个,也就是不同字段指向了不同表中的主键。需要注意数据表的存储引擎必须为InnoDB,
作用:
阻止执行
从表插入新行,其外键值不是主表的主键值便阻止插入;
从表修改外键值,新值不是主表的主键值便阻止修改;
主表删除行,其主键值在从表里存在便阻止删除(要想删除,必须先删除从表的相关行);
主表修改主键值,旧值在从表里存在便阻止修改(要想修改,必须先删除从表的相关行)。外键可以为空null
/*
外键
foreign key ;保证数据的完整性,正确性.
constraint 约束,强制, employee 雇员,department 部,
constraint 连接constraint; foreign key**
1外键: 格式- constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
或者: foreign key (外键列名称) references 主表名称(主表列名称)**
constraint empl_depa_fk foreign key employee_id reference department(department_id);**
外键可以为空null
2删除外键
*/
– 写在创造表的那一栏
CONSTRAINT empl_depa_fk FOREIGN KEY employee_id reference department(department_id);
– 删除外键
ALTER TABLE employee DROP FOREIGN KEY emlp_depa_fk;
– 添加外键(不是修改)
ALTER TABLE employee ADD CONSTRAINT empl_depa_fk FOREIGN KEY employee_id reference department(department_id);
级联:
级联执行
主表删除行,连带从表的相关行一起删除;
主表修改主键值,连带从表相关行的外键值一起修改。
/*
级连操作
ALTER TABLE employee ADD
CONSTRAINT empl_depa_fk FOREIGN KEY employee_id reference department(department_id)
on update cascade
;
*/
– 添加级联操作:
ALTER TABLE employee ADD
CONSTRAINT empl_depa_fk FOREIGN KEY employee_id reference department(department_id)
ON UPDATE CASCADE ON DELETE CASCADE;
更新
on update cascode
删除
on delete cascode;
数据表的设计
多对1-------在多的一方建立一个外键字段,指向一的一方的主键
一对1----可以在任意一方建立唯一唯一的(unique)外键,指向另一方的主键
多对多 ------建立中间表, 中间表中建立两个外键字段,分别指向两个多表的主键,并且中间表的这两个外键可以是复合主键.
范式 —6大范式
空间换取
1NF:每一列都是不可分割的原子数据项; —–一个表,
2NF:在1NF的基础上,非码属性必须完全依赖于(主属性或者主属性组的)码(在1NF基础上消除非主属性对主码的部分函数依赖); --------解决数据冗余,加一个表,因此 有两个表,一个表是主属性的码或者码组,一个是非码属性的表;
部分函数依赖也包括完全函数依赖;部分函数依赖的意思:其中一个非码属性依赖于主属性组的一个,
3NF:在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF基础上,消除函数传递依赖) -------进一步解决冗余,再加一个表,用来解决在非码属性表中存在的函数依赖关系,使得的更加的解除耦合,使得非码属性的列之间也没有2DF存在的问题.
BC范式:
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。
中文名
BC范式
外文名
The Boyce-Codd Normal Form
释 义
每个属性都不部分或传递依赖于码
分 类
数据库原理
函数简介
解释一下:对于关系模式R,若 R为第一范式,且每个属性都不部分依赖于候选键也不传递依赖于候选键,那么称R是BC范式 [1] 。
相对于第三范式,BC范式的要求更加严格。第三范式只是要求R为第二范式且非键属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求
5-17号
多表查询
例子
USE db2;
CREATE TABLE dept(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20));INSERT INTO dept(NAME) VALUES("开发部"),("市场部"),("财务部");
SELECT * FROM dept;CREATE TABLE emp1 (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender CHAR(2),salary DOUBLE , -- 工资join_date DATE,dept_date INT,CONSTRAINT emp_dept_fk FOREIGN KEY dept_date REFERENCES dept(id));
ALTER TABLE emp CHANGE dept_date dept_id INT;
INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('送悟空','男',7200,'2013-2-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('猪八戒','男',3600,'2010-12-02',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('唐僧','男',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('白骨精','女',5000,'2015-10-07',3); INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('蜘蛛精','女',4500,'2011-3-24',1);
笛卡尔积:
- 有两个集合A,B,取这两个集合所有的组成情况
- 完成多表查询.需要消除无用信息
多表查询的分类
内连接查询
- 交集部分
隐式内连接
SELECT * FROM (emp,dept);-- 查询员工信息和部门的信息:SELECT * FROM emp,dept WHERE emp.dept_id = dept.id;-- 查询员工的名称,性别,闭门表的名称,SELECT t1.name,-- 员工的姓名t1.gender,-- 员工的性别t2.name-- 部门的名字FROMemp t1,dept t2WHERE t1.dept_id = t2.id;
2显示内链接
语法: select * from t1 inner(可省略) join t2 on t2.dept_id = t1.id;
SELECT * FROM emp [INNER] JOIN dept ON emp.dept_id = dept.id;
外连接查询
左连接
查询的左表所有的记录和交集部分
SELECT * FROM emp LEFT[outer] JOIN dept ON emp.dept_id = dept.id;
右链接
- 查询的右表所有的记录和交集部分
子查询
查询嵌套的,
子查询是单行单列的
-- 1查询工资最高的员工信息 -- 1 =2SELECT MAX(salary) FROM emp;SELECT * FROM emp WHERE emp.salary =9000;-- 2查询工资最高的员工信息SELECT * FROM emp WHERE emp.salary =(SELECT MAX(salary) FROM em);-- 查询员工工资小于平均工资的人SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);
子查询是多行单列的
employee
deptment
bon
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYgk49Ih-1628914377784)(C:\Users\12479\AppData\Roaming\Typora\typora-user-images\image-20210517111351232.png)]
– 1只有or可以用in代替,如果是and,则不能用in代替;
–2在什么之间可以用 sth betweeen …and —;
-- 查询财务部和市场部所有员工的信息1方法一SELECT id FROM dept WHERE NAME ='财务部'OR NAME ='市场部';.......省略一步方法2SELECT * FROM emp WHERE dept_id IN( SELECT id FROM dept WHERE NAME ='财务部'OR NAME ='市场部');
子查询是多行多列的时候:
– 查询员工入职日期是2011-11–11之后的员工信息和部门信息
*SELECT FROM emp WHERE emp.join_date > ‘2011-11-11’ ;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErsYsmFY-1628914377787)(C:\Users\12479\AppData\Roaming\Typora\typora-user-images\image-20210517113450319.png)]
子查询可以作为一张虚拟表参与查询
-- 查询员工入职日期是2011-11--11之后的员工信息和部门信息-- 方法一-- 子查询的作为一个虚拟表在与部门表查询 SELECT * FROM emp;SELECT *FROM emp WHERE emp.join_date > '2011-11-11' ;--一SELECT * FROMdept t1 ,(SELECT *FROM emp WHERE emp.join_date > '2011-11-11')t2WHEREt2.dept_id = t1.id; ---- 方法二-- 普通内连接SELECT * FROMdept t1,-- 部门表emp t2 -- 员工表 WHERE t2.dept_id = t1.id -- 在部门中的员工 AND t2.join_date > '2011-11-11'; -- 入职时间大于2011的
查询语法
事务
1
start tanscation;
rollback;
commit;
START TRANSACTION;
SELECT * FROM accounts;
-- tansaction
-- rollback
UPDATE accounts SET balance WHERE NAME = ROLLBACK;COMMIT;
SELECT @@autocommit;
当为1是,自动提交,0 为手动,需要手动写commit;
2
事务的四大特征:
- 原子性automatic
- 持久性:事务提交或者回滚,数据库会持久性保存数据
- 隔离性isolation :多个事务相互隔离.
- 一致性:事务操作前后,数据总量不变.
事务的隔离级别
存在的问题
- 1脏读:一个事务中,读到另一个事务中还未提交的数据;
- 2不可重复读(虚读):在同一个事务,两次读取的数据不一样
- 3幻读:另一个添加了一条数据,则另一个事务查询不到自己的修改
级别:
read uncommited 未提交
存在的问题:1脏读,2不可重复读,虚读,幻读3
read commited 读已提交
存在的问题2虚读,幻读3
repeatable read 可重复读(mysql)
存在的问题3幻读:另一个添加了一条数据,则另一个事务查询不到自己的修改
serializable 串行化(Orcal)
no 可以解决所有的问题,把表锁上,
注点意:隔离级别从小到大安全性越来越高,但是效率越来越低
查询
select @@tx_isolation
设置
set global transaction isolation level ----
DCL管理用户,授权,
管理用户
1创建用户
USE mysql;
SELECT * FROM USER;
-- 创建用户
CREATE USER'zhangsan'@'localhost' IDENTIFIED BY'123';
-- 可以用'%'代替localhost
-- 删除用户
DROP USER 'zhangsan'@'localhost' IDENTIFIED BY'123';
2修改用户密码;
两个办法
3修改root密码
授权
use db1;
insert into stu(id,name,age) values(3,'张',33);
select * from stu;
insert into stu values (1,'张无',32,null,null,34);
INSERT INTO stu VALUES (2,'张三丰',32,"2322-11-22",NULL,34);
delete from stu where id =1;
truncate table stu;-- update 不用 table
update stu set age = 113, score = 130 where id =2;
select * from stu;
select id from stu;
create table student(
id int,
age int,
sex varchar(23),
address varchar(34),
math double,
english double
);
insert into student values(8,32,"男","北京",2,98);
insert into student values(9,35,"女","天津难",21,25);
INSERT INTO student VALUES(7,53,"女","天津",67,54);
`student``stu``student`
select distinct address from student;
select distinct name ,address from student;
select id,math as T恤,math +ifnull(english,0) as 总共 from student;
select * from student where id <>3;
--查询年龄在20-30的;
select * from student where id >1 and id <3;
select * from student where id between 1 and 3;
select * from student where id =1 or id =3 or id =4;
SELECT * FROM student WHERE id in(1,3,4);
select * from student where english is not null ;
select * from student where age like '_2%';
select * from student where address like'%津%';select *from student order by english ASc ,math ASC ;--ASc升序,desc降序,两个排序的时候就当第一个条件相同时,按照第二个规则select count(english) from student; --合函数排除了null.不计入里面.select count(ifnull(math,1)) from student;
select *from student;
select count(*)from student;
select min(math) from student;
select sum(english) from student;
select avg(math) from student;
-------------5.16号
select sex,avg(math) , count(id) from student group by sex ;-- 写count聚合函数就行,group
-- 分组函数的前面不要写基本列除了分组的那个, group/*select sex,Avg(math), count(id) from student where math > 2 group by sex having count(id)>2;
/--where 和having的区别:where在之前限定,若不满足则不参与分组 ,having在之后,都会参与,只是是否会显示
--2:where之后不能跟聚合函数,having可以跟;
SELECT sex,AVG(math), COUNT(id)个数 FROM student WHERE math > 2 GROUP BY sex HAVING 个数>2;
*/
/*
--分页查询
limit
*/select * from student limit 0,3; -- 第一页SELECT * FROM student LIMIT 3,3; -- 第二页/*公式:开始的索引 = (当前的页码-1)*每页显示的条数limit是一个"方言",只在mysql中有.*/ /*
约束 主键约束 primary key ;非空约束 not null唯一性; unique外键约束: foreign key; foreign*/ create table stu1(id int,name varchar(20) not null /*--非空*/);select *from stu1;-- 非空的删除,比较正规的看起来alter table stu1 modify name varchar(20);--alter table stu1 add address varchar(21) not null;drop table stu1;create table stu1 (id int,phone_number int unique); -- 唯一性select * from stu1;insert into stu1 values (1,23);INSERT INTO stu1 VALUES (2,3);`db1`-- 删除唯一性约束(不一样)-- 注意!!!!!!!!!alter table stu1 drop index phonenuber;/*
primary key 非空且唯一
表中的唯一*/
-- 主键的删除
ALter table stu1 drop primary key;
-- 创建字段之后添加主键功能
ALter table stu1 modify id int primary key;/*
自动增长auto_increment;*/create table stu2(id int primary key auto_increment,name varchar(20));-- 自动增长的删除alter table stu2 modify id int;-- 添加alter table stu2 modify id int auto_increment;select * from stu2;constraint/*外键foreign key ;## 外键保证数据的完整性,正确性.****constraint 连接constraint; foreign key**
1**外键: 格式- constraint 外键名称 foreign key (外键列名称) reference 主表名称(主表列名称)**constraint empl_depa_fk foreign key employee_id reference department(department_id);**外键可以是null,但是不能为另外一个表中不存在的.*/-- 写在创造表的那一栏constraint empl_depa_fk foreign key employee_id reference department(department_id);-- 删除外键alter table employee drop foreign key emlp_depa_fk;-- 添加外键(不是修改)alter table employee add CONSTRAINT empl_depa_fk FOREIGN KEY employee_id reference department(department_id);/*级连操作ALTER TABLE employee ADD CONSTRAINT empl_depa_fk FOREIGN KEY employee_id reference department(department_id) on update cascade;*/-- 添加级联操作:ALTER TABLE employee ADD CONSTRAINT empl_depa_fk FOREIGN KEY employee_id reference department(department_id)on update cascade on delete cascade;-- 5.17use db2;
create table dept(id int primary key auto_increment,name varchar(20));insert into dept(name) values("开发部"),("市场部"),("财务部");
select * from dept;create table emp1 (id int primary key auto_increment,name varchar(20),gender char(2),salary double , -- 工资join_date date,dept_id int,constraint emp_dept_fk foreign key dept_date references dept(id));
alter table emp change dept_date dept_id int;
insert into emp(name,gender,salary,join_date,dept_id)values('送悟空','男',7200,'2013-2-24',1);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('猪八戒','男',3600,'2010-12-02',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('唐僧','男',9000,'2008-08-08',2);
INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('白骨精','女',5000,'2015-10-07',3); INSERT INTO emp(NAME,gender,salary,join_date,dept_id)VALUES('蜘蛛精','女',4500,'2011-3-24',1);select * from emp;select * from dept;CREATE TABLE emp1 (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender CHAR(2),salary DOUBLE , -- 工资join_date DATE,dept_d INT,CONSTRAINT emp_dept FOREIGN KEY dept_d references dept(id));select * from (emp,dept);-- 查询员工信息和部门的信息:select * from emp,dept where emp.dept_id = dept.id;-- 1查询员工的名称,性别,闭门表的名称,select t1.name,-- 员工的姓名t1.gender,-- 员工的性别t2.name-- 部门的名字fromemp t1,dept t2where t1.dept_id = t2.id;-- 2查询员工的名称,性别,闭门表的名称,select * from emp inner join dept on emp.dept_id = dept.id;-- 查询左集合和交集的信息SELECT * FROM emp left JOIN dept ON emp.dept_id = dept.id;-- 查询工资最高的员工信息select max(salary) most from emp;select * from emp where emp.salary =9000;-- 查询工资最高的员工信息SELECT * FROM emp WHERE emp.salary = (SELECT MAX(salary) FROM emp);-- 查询员工工资小于平均工资的人select * from emp where emp.salary < (select avg(salary) from emp);-- 查询财务部和市场部所有员工的信息1select id from dept where name ='财务部'or name ='市场部';方法2select * from emp where dept_id in( SELECT id FROM dept WHERE NAME ='财务部'OR NAME ='市场部');-- 查询员工入职日期是2011-11--11之后的员工信息和部门信息-- 方法一-- 子查询的作为一个虚拟表在与部门表查询
select * from emp;select *from emp where emp.join_date > '2011-11-11' ;select * fromdept t1 ,(SELECT *FROM emp WHERE emp.join_date > '2011-11-11')t2wheret2.dept_id = t1.id;-- 方法二-- 普通内连接select * fromdept t1,-- 部门表emp t2 -- 员工表
where t2.dept_id = t1.id -- 在部门中的员工
and t2.join_date > '2011-11-11'; -- 入职时间大于2011的
询员工的名称,性别,闭门表的名称,
select * from emp inner join dept on emp.dept_id = dept.id;
– 查询左集合和交集的信息
SELECT * FROM emp left JOIN dept ON emp.dept_id = dept.id;
– 查询工资最高的员工信息
select max(salary) most from emp;
select * from emp where emp.salary =9000;
– 查询工资最高的员工信息
SELECT * FROM emp WHERE emp.salary = (SELECT MAX(salary) FROM emp);
– 查询员工工资小于平均工资的人
select * from emp where emp.salary < (select avg(salary) from emp);
– 查询财务部和市场部所有员工的信息
1
select id from dept where name ='财务部’or name =‘市场部’;
方法2
select * from emp where dept_id in( SELECT id FROM dept WHERE NAME ='财务部’OR NAME =‘市场部’);
– 查询员工入职日期是2011-11–11之后的员工信息和部门信息
– 方法一
– 子查询的作为一个虚拟表在与部门表查询
select * from emp;
select *from emp where emp.join_date > ‘2011-11-11’ ;
select *
from
dept t1 ,
(SELECT *FROM emp WHERE emp.join_date > ‘2011-11-11’)t2
where
t2.dept_id = t1.id;
– 方法二
– 普通内连接
select *
from
dept t1,-- 部门表
emp t2 – 员工表
where
t2.dept_id = t1.id – 在部门中的员工
and
t2.join_date > ‘2011-11-11’; – 入职时间大于2011的
#
数据库_初识mysql相关推荐
- navicat mysql两张表建立联系_初识MySQL
初识MySQL 为什么学习数据库 1.岗位技能需求 2.现在的世界,得数据者得天下 3.存储数据的方法 4.程序,网站中,大量数据如何长久保存? 5.数据库是几乎软件体系中最核心的一个存在. 什么是数 ...
- mysql核心数据库_从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程...
从MySQL基础进军MySQL核心架构 178集MySQL数据库核心基础视频教程 MySQL基础案例教程 课程目录 (1) 01MySQL基础_课程引入.avi (2) 02MySQL基础_为什么学习 ...
- MySQL数据库之——初识MySQL
1,初识MySQL javaEE: 企业级Java开发 Web 前端(页面:展示,数据!) 后台(连接点:连接数据库jdbc,连接前端(控制,控制视图跳转,和给前端传递数据)) 数据库(存数据,txt ...
- 初识mysql实验小结_初识mysql学习笔记
使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...
- MySQL数据库1初识MySQL
Mysql 一.数据库是什么? 字面意思:存数据的仓库 二.为啥使用数据库?(*) Excel的缺点: 1.管理不了大量的数据(10w量级以上的数据) 2.不能并发操作同一个数据表格 3.数据库支持一 ...
- 程序安装mysql数据库_安装Mysql数据库
1.安装Mysql数据库 ①下载Mysql数据包 wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x8 ...
- mysql 结构化数据库_【MySQL】——MySQL数据库和SQL结构化查询语言概述
[MySQL]--MySQL数据库和SQL结构化查询语言概述 [MySQL]--MySQL数据库和SQL结构化查询语言概述 文章目录数据库和SQL语言[1]数据库概述 [2]SQL语言 [3]MySQ ...
- mysql刷新当前数据库_看看MySQL数据库高级操作
免费资源网 - https://freexyz.cn/ 文章目录 数据表高级操作 准备工作:安装MySQL数据库 一.克隆表 方法一 方法二 二.清空表,删除表内的所有数据 方法一 方法二 三.创建临 ...
- mysql怎么用sb文件_初识mysql数据库
mysqld install :找到你的库 net start mysql ;启动mysql的服务端(server) mysql -uroot -p :启动mysql的客户端(Client) exit ...
最新文章
- 编程新手真言:不要去干追逐技术的蠢事,你只是用户,只需学会一门工具开发....
- audio 上一首 下一首 自定义样式_我们的歌:盛典即将来临,勤深深还有一首歌,这场表演值得期待...
- 必须正确理解的---ng指令中的compile与link函数解析
- qt 怎么设计个性化的滑块_小小滑块大大学问,你真的会用滑块了吗?
- Smarty的assign定义变量
- ubuntu之ufw防火墙
- Modelsim-Altera仿真设置
- 一年太久,研究员决定不等补丁直接披露 Safari 0day 详情
- 用a卡还是n卡_谁是玩家最爱的显卡?N卡优势太大,GTX 1060秒A卡全家
- 发生冲突未及时离场 绿军大将被NBA罚款3.5万美元
- ​从 Spark Streaming 到 Apache Flink:bilibili 实时平台的架构与实践
- html阅读器 怎么卸载,internetexplorer怎么卸载
- 如何用Word打开PDF文件?
- 解决mac按键精灵鼠标位置不准(连点器)
- linux网桥内核实现分析,Linux网桥实现分析
- 魔兽争霸无法在这个计算机,W7系统魔兽争霸3不能初始化DirectX怎么办
- 【知识兔】自学Excel之11:模板使用和打印设置
- 酸菜鱼,新一代微商暴富大机会?
- 枣庄高防php主机,枣庄机房_枣庄联通机房_枣庄BGP高防机房
- Firefox修改快捷键插件SakaKey使用教程
热门文章
- maven 整合ueditor富文本编辑器
- MOSS如何迅速的修改个人信息
- simotionD425的IDevice及相关应用
- think python学习心得-(6)利用words.txt来进行填字游戏
- 电脑误删内存卡照片如何恢复?(三个步骤)
- SpringBoot(三):Respond封装
- Python使用format输出时还想输出‘{‘,‘}‘的方法
- 广州水质检测实验室装修要求
- 词根词缀|sci/scribe/sect/sed等词根衍生单词
- 开发者真正想要得到的是什么?