0.win可以使用nacicat premium

1-Mysql基础语法_字段

​​

1.数据库

1.1查看数据库

show databases;

1.2创建数据库

create database 数据库名;

1.3删除数据库

drop database 数据库名;

1.4选择数据库

use 数据库名 //唯一一条不用加;的执行,不是SQL语句,是mysql语句

2.数据库的表

2.1查看表

show tables;

2.2创建数据表

create table 表名(字段名称1 字段类型1,字段名称2 字段类型2......)

2.3创建带有约束的数据表

1.唯一约束

unique

create table 表名(字段名称1 字段类型1 unique,字段名称2 字段类型2......)

2.非空约束(任何一个null都不等于另一个null)

not null

create table 表名(字段名称1 字段类型1 not null,字段名称2 字段类型2......)

3.主键约束(唯一和非空的组合)

方法1:直接使用两个约束条件组合
create table 表名(字段名称1 字段类型1 unique not null,字段名称2 字段类型2......)

方法2:主键primary key
create table 表名(字段名称1 字段类型1 primary key,字段名称2 字段类型2......)

4.一般数字类型组件配合mysql的自动增长策略

auto_increment

create table 表名(字段名称1 字段类型1 primary key auto_increment,字段名称2 字段类型2......)

由于自动增长,所以在insert into的时候就不用输入主键的values

5.外键约束

当有两张表时,表1的一个字段为表2的主键,则可以用表2的主键来约束表1的字段

foreign key(约束的字段名称) references 表2(主键)

create table class(num int primary key auto_increment, name varchar(11));

create table stu(num int primary key auto_increment, name varchar(11), classnum int, foreign key(classnum) references class(num))

2.4查看表中的数据

1.查看表的结构:

desc 表名

2.查看表的数据

select * from 表名

2.5删除一张表

drop table 表名

3.对表的结构进行修改

3.1增加字段

alter table 表名 add 字段名称 字段类型;

3.2修改字段

alter table 表名 modify 字段名称 字段类型;

3.3.删除字段

alter table 表名 drop 字段名称;

4.对表的内容进行修改

4.1向表中插入数据

insert into 表名(字段名称1,字段名称2...) values(字段1的值,字段2的值)

上面的字段可以只插入部分,要填几个就写几个,其他为空,字段的值必须跟字段的类型一致

如果要插入全部的可以把所有的字段名称都写,或者将()都去掉不写,就代表全部
insert into 表名 values(所有字段的值)


4.2删除表中的数据

清空表
delete from 表名;

删除表中的某一条数据
delete from 表名 where 条件表达式(如:字段名称=字段值);



4.3修改表中的数据

修改所有记录的字段名称对应的字段值
update 表名 set 字段名称1=新的字段值1;

修改某一条记录的字段名称对应的字段值

update 表名 set 字段名称1=新的字段值1 字段名称2=新的字段值2... where 条件表达式;

4.4查找表中的数据

1.查看全部内容

select * from 表名;

2.字段列表,表达式(算数运算)

select 字段列表,表达式(算数运算),函数 from 表名

select sal form emp

selsct ename,sal from emp

selsct sal,sal*12 from emp


3.where条件表达式查询

select * from 表名 where 条件表达式(可以多条件符合add or)


  • 等值比较 =
  • 大于 >
  • 小于 <
  • 大于等于 >=
  • 小于等于 <=
  • 不等于 <>
  • 且 and
  • 或 or
  • 在范围之内in(不包括自己)
  • 不在范围之内not in
  • 在范围之内between and(包括自己)
  • null值的判断 is null
  • 非空值得判断 is not null

4.函数

1.数学函数

PI()
FLOOR(x) 返回小于x的最大整数(去掉小数部分取整)
CEILING(x) 返回大于x的最小整数(加1取整)
ROUND(x,y) 但会参数x的四舍五入的又y位小数的值
TRUNCATE(x,y) 返回数字x截断为y位小数的结果

2.聚合函数(分组函数)

avg(col) 平均值
count(col) 返回指定列中非NULL值的个数
min(col) 最小值
max(col) 最大值
sum(col) 求和

3.字符串函数

concat(s1,s2...sn) 将s1,s2...sn连接成字符串
ltrim(str) 去掉字符串str开头的空格
rtrim(str) 去掉字符串str结尾的空格
trim(str) 去掉字符串str首部和尾部的空格
insert(str,x,y,instr) 将字符串str从第x位置看是,y个字符长度的子串替换为字符串instr
substring(str,x,y) 截取字符串x开始的y个子串

4.日期函数

year(datatime)
month(datatime)
day(datatime)
hour(time)
minute(time)
second(time)
data(datatime)
time(datatime)

5.别名

可以给字段、表达式、函数、表

select 字段/表达式/函数 别名 form rmp

如果别名是中文特殊字符需要加‘’

6.分组

select 字段/表达式/函数 form emp group by 字段名称

selsct max(sal) max_sal from group by deptno

注意:

如果使用分组函数那么,不在分组函数中的字段,必须存在于group by后面

正确:
selsct max(sal) max_sal,deptno from group by deptno

错误:
selsct max(sal) max_sal,ename from group by deptno


7.分组之后在家where条件查询

错误:
selsct max(sal) max_sal,deptno from group by deptno where max_sal > 2009

where条件只能判断数据表里面的字段名称,可以使用having就可以判断新的别名

正确:
selsct max(sal) max_sal,ename from group by deptno having max_sal > 2009


想查询一个部门的最高工资是谁,咋办?使用子查询

7.子查询

通过查询结果再次进行查询

setect ename,sal from emp where sal = (select max(sal) from emp)

查询公司中的哪些人是经理人

select mgr from emp

去掉重复的distinct

select distinct mgr from emp

去掉NULL

select distinct mgr from emp where mgr is not null

子查询

select ename,empno form emp where empno in(select distinct mgr from emp where mgr is not null)

查询平均工资最大的部门

组函数不可以嵌套

我们的查询结果可以作为另一个查询的数据源 当成一张表,当成表的过程中必须起别名

select avg_sal,deptno from (select avg(sal)avg_sal, deptno from emp group by deptno) e where
avg_sal = (select max(avg_sal) from (select avg(sal)avg_sal, deptno from emp group by deptno) avg_table

8.多表查询

查询员工的姓名和员工所在部门的名称

涉及两个表emp和dept

select ename,dname from emp,dept;

笛卡尔积 14*4=56会出现56条结果

select ename,dname from emp,dept where emp.deptno = dept.deptno

联合join

select ename,dname from emp join dept on emp.deptno = dept.deptno

三表查询

select ename,dname,grade from emp join dept join salgrade on emp.deptno = dept.deptno and emp.sal between losal and hisal

查询员工的姓名和员工经理人的姓名

把同一张表分成两张表,这样就可以多表查询了

select e.ename, m.ename from emp e join emp m on e.empno = m,mgr;

左外联合/左边表中如果存在记录没有匹配到还想显示出来

select e.ename, m.ename from emp e left join emp m on e.empno = m,mgr;

右外联合/右边表中如果存在记录没有匹配到还想显示出来

select ename,dname from emp right join dept on emp.deptno = dept.deptno

作业

部门的平均薪水等级

部门薪水等级的平均值

雇员之中哪些人是经理人

不用组函数求薪水最大值

平均薪水最高的部门编号

平均薪水最高的部门名称

平均薪水的等级最低的部门名称

比普通员工的最高薪水还要高的经理人名称