MySQL命令→select

一、MySQL之select 的用法

1、所有字段限量查询

当一个表中有很多条数据时,我们需要查询表中的前n条数据所有字段的内容时,用的命令为:select * from employees limit n;

 

 2.计数

查询表里总数据:select count(*) from 表名;

select count(*) from employees;

select count(1) from employees;

 

 

3.条件过滤

3.1并且(AND)

and 并且的关系,多个条件要同时满足

select * from employees where first_name="Georgi"and last_name="Facello"and hire_date="1986-06-26";

 

 

3.2或者OR

当我们需要在一个有很多条数据的表中查询到满足其中部分条件的数据时,我们使用的命令为:

select * from employees where first_name="Georgi"or last_name="admin" limit 10

 

 

3.3包含in

当我们需要在一个有很多条数据的表中查询到包含某个或某些条件的数据时,我们使用的命令为:

select * from employees where last_name in("Christ","lamba","asdfg")limit 10;

 

 

3.4范围检查(between and)

当我们需要在一个有很多条数据的表中筛选某个字段的范围,这个范围包含头与尾,使用的命令为:

select * from employees where hire_date between "1986-12-01"and "1986-12-31" -> limit 5;

 

 

3.5否定结果(not)

当我们需要在一个有很多条数据的表中查询某些字段不包含某个条件(范围)的数据时,用的命令为:

select * from employees where last_name not in("koblick") limit 5;

 

 

3.6匹配任意字符(%)

当一个表中有很多条数据,我们想要查询包含某些关键词的数据,但是关键词我们又记忆不清时,使用的命令为:

select * from employees where first_name like "christ%" limit 5;

 

 前后都可以用%代替,进行模糊查找;

 

 

3.7下划线(——)

ka前面任意两个字符串,后面为其他字符串,几个下划线代表几个字符串

当一个表中有很多条数据,我们想要查询包含某些关键词的数据,但是关键词中有几个字符我们又记忆不清,使用的命令为:

select * from employees where first_name like "__ka%"limit 5;

3.8以什么为开头的 " ^"

当我们需要从一个有很多数据的表中,查询到以某个(些)字符开头的数据时,我们用的命令为:

select * from employees where first_name rlike "^mu" limit 5;

3.9以什么作为结束“$"

当我们需要从一个有很多数据的表中,查询到以某个(些)字符结尾的数据时,我们用的命令为:

select * from employees where first_name rlike "ro$" limit 5;

 

 

3.10使用别名as

当我们需要更直观的看到某个数据时,我们可以给其设置别名:select count(1) as 总数 from employees;

 

 

 

4.对结果信息排序order by

当我们需要对查询的结果进行排序时,我们使用的命令为:

查询薪资最高的员工信息

select * from salaries order by salary desc limit 10;正序 由高到低排序

select * from salaries order by salary asc limit 10;倒序 由低到高排序(如果不使用关键字,则默认倒叙)

 

 

5.聚合函数

聚合:group by表示对相同结果进行聚合

当我们查询某一个表中某个字段的数据的条数,并把相同结果进行聚合后作为结果显示出来,使用的命令为:select gender,count(1)  as count from employees group by gender;

查询总数(count) 查询男女的性别分别的总数

 

 select salary,count(1) as count from salaries group by salary 【order by count desc】 limit 10;

备注解读:将薪水相同的人的总数按正序排列

 

salary,count(1):表示查询salary数据的总数;

count(1) as count:表示把count(1)的别名设置为count;

group by salary:表示把salary中相同的数据聚合起来;

order by count desc:表示根据数据聚合后的多少按照从高到低的顺序进行排列;

总和:sum

最大:max

最小:min

平均:avg

  

 

 

 

 

按照年份将员工薪资从高到低正序排列

{select year(from_date) as dateyear,sum(salary) as sumsalary from salaries} group by dateyear order by sumsalary desc limit 10;

备注:查看年份和薪水,将薪水总和按照正序排序

 

 year(from_date):表示仅显示from_date的年份;

year(from_date) as dateYear:表示把year(from_date) 的别名设置为dateYear;

sum(salary):表示查询salary的和值;

sum(salary) as sumSalary:表示把sum(salary)的别名设置为sumsalary;

group by dateYear:表示把dateYear中相同的聚合到一起;

order by sumSalary desc:表示将sumSalary从高到低进行排列;

 

6.平均(average)

按照正序查看年份的平均工资

 

 7.去重:distinct表示去掉重复

当我们在查询某项数据,需要去掉里面重复的内容时,使用的命令为:select distinct title from titles;

 

 

8.过滤having

通过having来过滤group by字句的结果信息

找到平均薪资超过100000的员⼯,使用的命令为: select emp_no,avg(salary) as avg from salaries group by emp_no having avg>100000 order by avg desc;

 

emp_no,avg(salary) as avg:查询员工的编号和平均薪资;

avg(salary) as avg:表示把avg(salary)的别名设置为avg;

group by emp_no:表示把emp_no中的数据聚合在一起;

having avg>100000:表示选取avg大于100000;

order by avg desc;表示将平均工资正序排列。

 

 

二、表关联查询

在工作中很多时候,我们需要获取到具体的数据需要关联好几个表,才能够查询获得自己想要的数据,这样就需要几个表关联起来进行查询。

1.inner join内连接

查询关联字段共同拥有的数据(重点 面试题)

 

 

 首先创建三个表格,如我们通过一个人的身份证信息(code)把一个人的个人信息(person)、工作经历(work)、教育经历(school)三个表关联起来:

命令:select person.name,person.age,work.company,school.schoolName from person inner join work on person.code=work.code inner join school on work.code=school.code where person.code=1001;连接多个表格

将三个表格中共同拥有的数据code=1001,连接起来

备注:

person.name,person.age,work.copany,school.schoolname:想要获得的内容的字段;

inner join:表示内关联,即所有表中共有的数据;

person inner join work on person.code=work.code:表示person和work两个表通过code关联;

on:表示通过什么进行关联;

where person.code=1001:表示提取code为1001的这条数据中的内容。

 

例:表e和表s通过emp_no内连接起来,查询e表中的first name、last name、gender和s表中的salary ,显示出salary大于40000的十行数据:

 

2.左连接:

获取左表所有记录,获取左边数据表所有符合要求的字段数据信息

 

当我们想找出第一个表里所有信息,和第二个表里的某些字段,就需要建立左连接,

例1:将person,work两个表通过左连接连接起来

命令:select p.name,p.age,p.sex,w.company,w.salary from person as p left join  on p.code=w.code where p.code=1002;

 

 

例2:将person,work,workinfo三个表通过左连接连接起来

命令: {select p.name,p.age,w.company,w.salary,info.type,info.issafe from person as p}

【left join work as w on p.code=w.code 】 {left join workinfo as info on w.workid=info.workid}

 

备注解读:选择三个表格当中需要的字段 :select p.name,p.age,w.company,w.salary,info.type,info.issafe from person as p

左连接work表:left join work as w on p.code=w.code

左连接workinfo表: left join workinfo as info on w.workid=info.workid

 

例3:将四个表格关联起来查询 person(name,age);work(company,salary);   school(schoolname);schoolinfo(xueli,schooltype).

命令解读:select p.name,p.age,w.company,w.salary,s.schoolname,info.xueli,info.schooltype (需要查询的字段)

                 from person as p left join work as w on p.code=w.code (将person和work 通过code连接)

                 left join school as s on w.code=s.code(将work和school通过code连接)

                 left join schoolinfo as info on s.schoolid=info.schoolid;(将school和schoolinfo通过schoolid连接)

 

 

3.右连接

获取右表所有记录的信息,获取右边数据表所有的数据信息

 

 例1.查询公司,薪水,工作类型,是否安全,将work ,workinfo通过相同的workid右连接起来

命令:select w.company,w.salary,info.type,info.issafe from work as w right join workinfo as info on w.workid=info.workid;

 

 

例2:将5个表格通过右连接连接起来

需求查看name,age,company,salary,type,issafe,schoolname,xueli,schooltype

备注解读:

select p.name,p.age,w.company,w.salary,winfo.type,winfo.issafe,s.schoolname,sinfo.xueli,sinfo.schooltype (需要查询的信息  )

from person as p right join work as w on p.code=w.code(将person和work通过相同字段code连接)

right join workinfo as winfo on w.workid=winfo.workid(将work和workinfo通过相同字段workid连接)

right join school as s on w.code=s.code (将work和school通过相同字段code连接)

right join schoolinfo as sinfo on s.schoolid=sinfo.schoolid;(将school和schoolinfo通过schoolid连接)

 

 

例3:需求: 查询出姓名,学历,学校类型

select p.name,sinfo.xueli,sinfo.schooltype from person as p right join school as s on p.code=s.code right join schoolinfo as sinfo on s.schoolid=sinfo.schoolid;

 

 备注:因为表person和表schoolinfo没有相同字段,不能直接关联,所以需要再找到一个表,将两个无关联的表关联起来,即A与C不能直接连接,需要找到一个表B 将A与C连接上。

4.子查询

⼦查询也是select语句的⼀种形式,以表2的结果作为表1的查询条件

例1:select * from person where code in (select code from work where code=1001);

 

 例2:select * from person where code in (select code from work where salary>500);

 

 

三、MySQL索引

在MySQL中,创建MySQL的索引主要是为了提⾼MySQL查询的效率。但是添加太多的索引也是会降低更新表的速度的,表的名称和索引index没有关系

1.创建索引

 

 2.添加索引

 

 3.删除索引

 

 

 

 

 

 

 

 

posted @ 2022-03-07 18:47  lm970418  阅读(617)  评论(0编辑  收藏  举报