数据库
首页 > 数据库> > mysql/表sql语句补充/关键字查询

mysql/表sql语句补充/关键字查询

作者:互联网

操作表的SQL语句补充

1.修改表名
	alter table 表名 rename 新表名;

2.新增字段
	alter table add 字段名 字段类型(数字) 约束条件
3.新增指定字段排在第一位
	alter table add 字段名 字段类型(数字) 约束条件 first;
4.新增字段指定字段的位置
	alter table add  字段名 字段类型(数字) 约束条件 after 已经存在字段;

5.修改字段
	alter table 表名 change 旧字段 新字段 字段类型(数字) 约束条件;

6.删除字段
	alter table 表名 drop  字段名;
create table T1_alter(id int primary key auto_increment,name varchar(32));
#修改表名
alter table T1_alter rename test_alter;
#新增字段
alter table test_alter add age int;
#新增字段排在第一位
alter table test_alter add name first; 
#新增字段指定位置
alter table test_alter add sex varchar(32) default 'male' after name;
#修改字段
alter table test_alter modify name varchar(32);
#删除字段
alter table drop 字段名;

mysql关键字查询书写顺序

select => from => where => Group by => having =>order by => limit

select 与from

where

查询关键字之where筛选

查询条件越多,查询出来的记录就会越少。因为,设置的条件越多,查询语句的限制就更多,能够满足所有条件的记录就更少。为了使查询出来的记录正是自己想要的,可以在 WHERE 语句中将查询条件设置的更加具体。

查询条件 关键字
比较 比较运算符和逻辑运算符
确定范围 between and关键字查询
确定集合 in not in
空值 is null
多条件查询(多重运算) and ,or, XOR
字符匹配 like,not like 通配符%,_
  select name,post from emp where post_comment =null; #不能用等号
  select name,post from emp where post_comment is NULL; 
  select name,post from emp where post_comment is not null;  #查询岗位描述不为空的

group by

分组:按照一些指定的条件将单个单个的数据分为一个个整体

​ 分组之后我们研究的对象应该是以组为单位,不应该再直接获取单个数据项,如果获取了应该直接报错,

​ select 后面直接填写的字段只能是分组的一句(其它字段需要借助一些方法才可以获取)

set global sql_mode = 'strict_trans_tables,only_full_group_by';
group by配合分组常见使用的聚合函数
max/最大值
min/最小值
sum/总和
count/计数
avg/平均
select post,group_concat(name) from emp group by post;
select post,group_concat(name,"_SB") from emp group by post;
select post,group_concat(name,": ",salary) from emp group by post;
select post,group_concat(salary) from emp group by post;

having

where 与having 的功能其实是一样的,都是用来筛选数据
只不过where 用于分组之前的筛选,而having 用于分组之后的筛选
为了认为的区分,所以叫where是筛选,having是过滤

1.统计各部门年龄再30岁以上的员工平均工资,并且保留平均工资大于10000的部门

select post,avg(salary) from emp 
	where age >= 30
	group by post
	having avg(salary) >1000;

distinct

去重,去重前提数据必须是一模一样

select distinct age from emp;

order by

排序,升序或者降序

order by关键字
asc 默认升序
desc默认降序
select * from emp order by salary asc;
select * from emp order  by salary desc;
select * from emp order by age desc;
select * from emp oreder by age desc,salary asc;
mysql> select post,avg(salary) from emp where age>10 group by post having avg(salary) > 1000 order by salary;

limit

limit关键字
limit A ;A 这里代指数字
limit A,B; (A,B必须为整数)A表示起始位,B表示展示几条
select * from emp limit 3;
select * from emp limit 3,5;   

regexp正则

select * from emp where name regexp '^j.*(n|y)$';

多表查询

子查询
​ 将一张表的查询结果括号括起来当做另外一条SQL语句的条件
​ eg:类似以日常生活中解决问题的方式
​ 第一步干什么
​ 第二步基于第一步的结果在做操作 ...
连表操作
​ 先将所有涉及到结果的表全部拼接到一起形成一张大表 然后从大表中查询数据

#创建表
create table dep1(
    id int primary key auto_increment,
    name varchar(20) 
);

create table emp1(
    id int primary key auto_increment,
    name varchar(20),
    gender enum('male','female') not null default 'male',
    age int,
    dep_id int
);
##插入测试数据
insert into dep1 values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营'),
(205,'安保')
;

insert into emp1(name,gender,age,dep_id) values
('jason','male',18,200),
('dragon','female',48,201),
('kevin','male',18,201),
('nick','male',28,202),
('owen','male',18,203),
('jerry','female',18,204);

子查询

查询jason的部门名称

1.先获取jason的部门编号
select dep_id from emp1 where name = 'jason';  # 200
2.根据部门编号获取部门名称
select name from dep1 where id = 200;

#子查询
mysql> select name from dep1 where id = (select dep_id from emp1 where name = 'jason');

连表操作

select * from emp1,dep1; #笛卡尔积

我们不会用笛卡尔积来求数据,效率太低,连表有专门的语法

名称 方法
inner join 内连接
left join 左连接
right join 右连接
union 全连接
select * from emp1 left join dep1 on emp1.dep_id = dep1.id;

select * from emp1 right join dep1 on emp1.dep_id = dep1.id;

练习题

2.完成下列练习题

2.完成下列练习题
1. 查询岗位名以及岗位包含的所有员工名字
	select post,group_concat(name) from emp group by post;
2. 查询岗位名以及各岗位内包含的员工个数
	select post,count(post) from emp group by post;
3. 查询公司内男员工和女员工的个数
	select sex,count(sex) from emp group by sex;
4. 查询岗位名以及各岗位的平均薪资
	select post,avg(salary) from emp group by post;
5. 查询岗位名以及各岗位的最高薪资
	select post,max(salary) from emp group by post;
6. 查询岗位名以及各岗位的最低薪资
	select post,min(salary) from emp group by post;
7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
	select sex,avg(salary) from emp group by sex;
8. 统计各部门年龄在30岁以上的员工平均工资
	select post,avg(salary) from emp where age>30 group by post;
	
9. 统计各部门年龄在10岁以上的员工平均工资,并且保留平均工资大于1000的部门,然后对平均工资进行排序
select post,avg(salary) from emp where age > 10 group by post having avg(salary)>10000 order by avg(salary);

标签:salary,group,name,mysql,关键字,emp,sql,post,select
来源: https://www.cnblogs.com/zongliang-ya/p/16597074.html