MySQL数据操作之高级查询——别名、去重、where子句、排序

前言:本期咱们学习as(别名)、distinct(去重)、where子句、order by(排序)。在实际工作中会遇到各种各样的查询需求,如果只学习前面的一些基础的话,是满足不了日常工作中的需求的,大家继续加油哦!

1.数据准备

-- 创建mydb库:mydb
create database mydb default character set utf8 collate utf8_general_ci;
/*
创建学生表:students,
学生号为Sid,数据类型为varchar(10),主键,
姓名为name,数据类型为varchar(10),
性别为sex,数据类型为varchar(1),
年龄为age,数据类型为int,
班级为class,数据类型为varchar(10),
身份证号为card,数据类型为varchar(20),
城市为city,数据类型为varchar(20)
*/
create table students(
	Sid varchar(10) primary key,
	name varchar(10),
	sex varchar(1),
	age int,
	class varchar(10),
	card varchar(20),
	city varchar(20)
);
-- 插入数据
insert into students values
('001','王昭君','女',30,'3班','634101199003157654','北京'),
('002','诸葛亮','男',29,'2班','110102199104262354','上海'),
('003','鲁班大师','男',30,'1班','820102199003047654','南京'),
('004','白起','男',35,'4班','840202198505177654','安徽'),
('005','大乔','女',28,'3班','215301199204067654','天津'),
('006','孙尚香','女',25,'1班','130502199506137654','河北'),
('007','百里玄策','男',39,'2班','140102198107277654','山西'),
('008','小乔','女',25,'3班',null,'河南'),
('009','百里守约','男',31,'1班','','湖南'),
('010','妲己','女',24,'2班','440701199607147654','广东'),
('011','廉颇','男',30,'1班','110202199005017754','北京'),
('012','孙膑','男',36,'3班','650102198401297655','新疆');

2.别名

语法:
字段别名:
select 字段名 as 别名 from 表名;

select 字段名 别名 from 表名;
表别名:
select * from 表名 as 别名;

select * from 表名 别名;
注意:as是可以省略的
练习一:

-- 查询students表中的age字段,要求查询结果以字段名‘年龄’显示
select age as 年龄 from students;
-- 或
select age 年龄 from students;

练习二:

-- 查询students表中的name、sex、age字段,要求查询结果以‘姓名’、‘性别’、‘年龄’显示
select name as 姓名,sex as 性别,age as 年龄 from students;
-- 或
select name 姓名,sex 性别,age 年龄 from students;

练习三:

-- 查询students表中的所有数据,并且给students起个别名 st
select * from students as st;
-- 或
select * from students st;

3.去重

语法:select distinct 字段名 from 表名;
作用:过滤查询结果中的重复记录
练习一:

-- 查询students表中班级字段中有哪些不同的值
select distinct class from students;

4.where子句

语法:select * from 表名 where 条件;
注意:where子句在修改和删除语句中同样适用
练习一:

-- 查询students表中城市为北京的记录
select * from students where city='北京';

练习二:

-- 查询students表中班级为1班的记录,并且查询结果以‘name’、‘sex’、‘class’显示
select name,sex,class from students where class='1班';

5.where子句-运算符

where后面支持多种运算符,来进行条件处理。
运算符的种类:
比较运算符:=(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、!=或<>(不等于)
练习一:

-- 查询students表中姓名为‘廉颇’的年龄
select age from students where name='廉颇';

练习二:

-- 查询students表中年龄大于等于30岁的所有记录
select * from students where age>=30;

练习三:

-- 查询students表中年龄小于等于25岁的所有记录
select * from students where age<=25;

练习四:

-- 查询students表中年龄不等于30岁的所有记录
select * from students where age!=30;
-- 或
select * from students where age<>30;

逻辑运算符:
and(与):两个条件必须都满足
语法:where 条件 and 条件
练习五:

-- 查询students表中年龄为30并且性别为女的所有记录
select * from students where age=30 and sex='女';

or(或):两个条件只要有一个条件满足即可
语法:where 条件 or 条件
练习六:

-- 查询students表中班级为2班或者城市为北京的所有记录
select * from students where class='2班' or city='北京';

not(非):否定的意思,结果取反
语法:where not 条件
练习七:

-- 查询students表中城市不为河北的学生姓名
select name from students where not city='河北';

6.where子句-模糊查询

语法:select * from 表名 where 字段名 like '模糊匹配的内容';
分类:
%表示任意多个任意字符;
_表示一个任意字符;
练习一:

-- 查询students表中姓名以‘王’开头的学生记录
select * from students where name like '王%';

练习二:

-- 查询students表中姓名以‘白’开头,且名只有一个字的学生记录
select * from students where name like '白_';

练习三:

-- 查询students表中姓名以‘诸’开头,且名只有两个字的学生记录(注意:下划线'_'为2个)
select * from students where name like '诸__';

练习四:

-- 查询students表中姓名为任意姓,名为‘约’的学生记录
select * from students where name like '%约';

练习五:

-- 查询students表中姓名包含‘里’的学生记录
select * from students where name like '%里%';

7.where子句-范围查询

in:
语法:select * from 表名 where 字段名 in ('值','值','值');
作用:in表示在一个非连续的范围内查找
练习一:

-- 查询students表中学生姓名为‘白起’、‘小乔’、‘妲己’的学生记录
select * from students where name in ('白起','小乔','妲己');

between…and…:
语法:select * from 表名 where 字段名 between 开始值 and 结束值;
作用:表示在一个连续的范围内(闭区间)查找
练习二:

-- 查询students表中年龄为25至30的学生记录
select * from students where age between 25 and 30;

练习三:

-- 查询students表中年龄为25至30岁以外的学生记录
select * from students where not age between 25 and 30;

8.where子句-空判断

判断为空:select * from 表名 where 字段名 is null;
判断不是空:select * from 表名 where 字段名 is not null;
注意:null代表什么都没有,’'代表长度为0的字符串
练习一:

-- 查询students表中身份证号为null的学生记录
select * from students where card is null;

练习二:

-- 查询students表中身份证号为非null的学生记录
select * from students where card is not null;

9.排序

语法:select * from 表名 where 条件 order by 字段名1 asc/desc,字段名2 asc/desc;
说明:
将查询出来的结果按照字段名1排序,如果字段名1的值相同则按照字段名2排序;
asc为从小到大排序,即升序,默认为升序(asc可以省略不写);
desc为从大到小排序,即降序;
练习一:

-- 查询students表中所有学生记录,并且按年龄从小到大排序
select * from students order by age asc;
-- 或
select * from students order by age;

练习二:

-- 查询students表中所有学生记录,并且按年龄从大到小排序,若年龄相同,则按照学生号从小到大排序
select * from students order by age desc,Sid asc;
-- 或
select * from students order by age desc,Sid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值