目录
一、SELECT语句查询
二、查询所有字段
1、列出所有字段名称进行查询
2、使用通配符 * 进行查询
三、查询指定字段
四、查询去重数据
五、条件查询(带比较运算符、带逻辑运算符)
1、带比较运算符的查询
(1) 带 = 运算符的查询
(2)带 < > 运算符的查询
(3)带 < 运算符的查询
(4)带 >= 运算符查询
(5)带 IN 运算符的查询
(6)带 IS NULL 运算符的查询
(7)带LIKE 运算符的查询
%通配符
_ 通配符
2、带逻辑运算符的查询
(1)带NOT运算符的查询
(2)带AND运算符的查询
AND运算符查询
BETWEEN运算符查询
(3)带OR运算符的查询
学习MySQL的查询所有字段、查询指定字段、查询去重数据、带比较运算符的查询、带逻辑运算符的查询。
从数据中查询数据的基本语句是SELECT语句。
语法格式:
SELECT [ DISTINCT ] * | { select_ expr1 , select_ expr2 , ... } FROM 数据表名 [ WHERE 条件表达式1 ] [ GROUP BY 字段名 [ HAVING 条件表达式 2 ] [ ORDER BY 字段名 [ ASC | DESC ] ] [ LIMT [ OFFSET ] 记录数 ]
上述语法语法格式中,SELECT语句由多个子句组成,各子句的含义如下
(1)SELETC [ DISTINCT ] * | { select_expr1 , select_expr2 , ... } :指定查询结果中需要返回的值,其中DISTINCT是可选项,用于剔除执行结果中重复的数据;通配符 * 是执行结果中所有字段名称的简写方式;{ select_exprl,select_expr2,... } 表示要检索的列表,可以是字段名或表达式,可以指定字段名称。通配符与{ select_exprl,select_expr2, ... } 两者为互斥关系,任选其一。
(2)FROM数据表名:表示从指定名称的数据表中查询数据。
(3)WHERE条件表达式1:WHERE子句,是可选项,用于指定查询条件。
(4)[ GROUP BY 字段名 [ HAVING条件表达式2] ] :GROUP BY子句,是可选项,用于将查询结果按照指定字段进行分组;HAVING子句也是可选项,用于对分组后的结果进行过滤。
(5)[ ORDER BY字段名[ASC | ESC] ]:ORDER BY子句,是可选项,用于将查询结果按指定字段进行排序;排序方式由参数ASC或DESC控制,其中ASC表示按升序进行排列,DESC表示按降序进行排列。如果不指定参数,默认为升序排列。
(6)[ LIMIT [ OFFSET ]记录数 ]:LIMIT子句,是可选项,用于限制查询结果的数量。LIMIT后面可以跟2个参数:第一个参数OFFSET表示偏移量,如果偏移量为0则从查询结果的第一条记录开始,偏移量为1则从查询结果的第二条记录开始……以此类推,偏移量为n则从查询结果的第n+1条记录开始。OFFSET为可选值,如果不指定,其默认值为0;第二个参数“ 记录数 ”表示返回查询记录的条数。
二、查询所有字段
语法格式:
SELECT 字段名1 , 字段名2 , ... FROM 数据表名 ;
创建一个表插入数据,并查看
创建一个表,查看
插入数据,后使用语法格式(SELECT 字段名1 , 字段名2 , ... FROM 数据表名 ;)查看
(1)按字段名顺序查看
(2)不按字段名顺序查看
在SELECT 语句中还可以使用通配符 * 匹配数据表中所有字段。
语法格式:SELECT * FROM 数据表名 ;
从执行结果可以看出,使用通配符 * 同样可以查出数据表中所有字段的数据,这种方式比较简单,但执行结果只能按照字段在表中定义的顺序显示。
注意:
当不知道字段的名称时,可以使用通配符获取字段信息。一般情况下,查询数据表中所有段的数据时,不建议使用通配符,因为使用通配符虽然可以节省输入查询语句的时间,但会降低查询的效率。
三、查询指定字段
查询数据时,有时不需要查询所有字段的信息。
查询指定字段可以在SELECT语句的字段列表中指定要查询的字段。
语句格式:SELECT 字段名1 , 字段名2 , ... FROM 数据表名 ;
查询empno,ename,job字段数据
数据表的字段如果没有设置唯一约束,那么该字段就可能存储重复的值。有时需要将结果中的重复值去除后进行展示。MySQL中提供了DISTINCT关键字,可以在查询时去除重复的值。
语法格式:SELECT DISTINCT 字段名 FROM 数据表名 ;
(可以多个字段一起去重)
在上面的语法格式中,字段名表示要去除重复值的字段名称。
= 运算符用于比较运算符左右两边的操作数,如果操作数的字段类型为字符串,则需要使用单引号对操作数进行包裹。在WHERE子句的条件表达式中,字符串以不区分大小写的方式进行比较运算。
查询某一员工信息
< > 运算符和 != 运算符都用于比较操作数是否不相等。例如,技术人员想要使用SQL语句查询员工表中所属部门编号不是30的员工信息,可以在查询时使用<>运算符对部门编号进行比较,具体SQL语句及执行结果如下。
查询deptno 不等于30的员工信息
注意:NULL 不能使用 < > 运算符和 != 运算符进行比较
<运算符用于判断左侧操作数是否小于右侧操作数。例如,技术人员想要使用SQL语句查询员工表中工资小于1000元的员工信息,可以在查询时使用 < 运算符对员工工资进行比较。
查询工资sal小于2000元的员工信息
>= 运算符用于判断左侧操作数是否大于或等于右侧操作数。例如,技术人员想使用SOL语句查询员工表中基本工资大于或等于3000元的员工信息,可以在查询时的用>=运算符对员工工资进行比较,具体SQL语句及执行结果如下。
查询工资sal大于或等于3000元的员工信息
IN 运算符用于判断某个值是否在指定集合中,如果值存在集合中,则满足条件。
语法格式:
SELECT *| 字段名1 , 字段名2 , ... FROM 数据表名 WHERE 值 [ NOT ] IN ( 元素1 , 元素2 , ...) ;
在上面的语法格式中,“ 元素1,元素2... ”表示集合中的元素;NOT是可选项,表示查询集合元素之外的数据。
查询员工表中所属部门编号deptno为10或20的员工信息
当操作数为NULL时,不能使用运算符= 、< >、!=进行比较,这是因为NULL代表未指定或不可预知的值。如果需要判断数据是否为NULL,可以使用IS NULL进行比较。
查询某一字段名为NULL
在查询数据时,有时需要对数据进行模糊查询,例如查询emp表中ename字段的
值以字符a开头的记录。为实现这种查询,MySQL提供了LIKE关键字。LIKE关键字
用于比较两个操作数是否匹配。
语法格式:
SELECT *| { 字段名1 , 字段名2 , ... } FROM 数据表名 WHERE 值 [ NOT ] LIKE 匹配的字符串 ;
在上面语法格式中,NOT 是可选项 ,表示查询与指定字符串不匹配的记录。“ 匹配的字符串 ”是用来和值进行匹配的字符串,必须使用单引号或双引号进行包裹。
使用LIKE进行字符串的匹配时,匹配的字符串可以是确定的,也可以是模糊的。换句话说,LIKE后面紧跟的匹配的字符串可以是一个普通字符串,也可以是不确定的字符串。当匹配的字符串不确定时,可以使用通配符代替一个或多个真正的字符。LIKE关键字支持的通配符有两个,分别是百分号( % )和下画线( _ )。下面分别讲解这两个通配符在LIKE查询中的使用。
包括空字
%通配符是模糊查询最常用的通配符,它可以匹配任意长度的字符串,包括空字符串。例如,字符串 c%可以匹配所有以字符 c 开始的任意长度的字符串,如c、cu、cut等。
查询名字ename中以某一个字为结尾的员工(名字中以” 一 “ 结尾的员工)
在上述SELECT语句中,使用LIKE进行模糊查询,字符“ 一 ”之前使用%通配符为任意长度的字符串占位,表示匹配以字符“ 一 ”结尾的字符串;由执行结果可知,SELECT语句按要求查询出姓名以“ 一 ”结尾的员工信息。
%通配符可以出现在匹配字符串的任意位置。
查询员工表中姓名ename以“ 萧 ”开头且以“ 一 ” 结尾的员工信息
在上述SELECT语句中,使用LIKE进行模糊查询,“萧”字符和“一”字符的中间使用%通配符为任意长度的字符串占位;由执行结果可知,SELECT语句按要求查 的出姓名以“萧”开头且以“一”结尾的员工信息。
使用LIKE模糊查询时,可以出现多个%通配符。
查询员工表中姓名ename包含字符“ 十 ”的员工信息
在上述SELECT语句中,使用LIKE进行模糊查询,字符“ 十 ”的左右两边都使用%通配符为任意长度的字符串占位,表示查询所有包含字符“ 十 ”的字符串。由执行结果可知,SELECT语句按要求查询出姓名包含字符“ 十 ”的员工信息。
通配符用于匹配单个字符,如果要匹配多个字符,需要使用多个 _ 通配符,每个通配符 _ 代表一个字符。例如,字符串cu_ 可以匹配以字符串cu开始,长度为3的字符串,如cut、cup等;字符串c__1匹配在字符c和字符1之间包含两个字符的字符串,如cool、coal等。需要注意的是,空格字符也是一个字符,例如,通配字符串“M__QL”能匹配字符串“MySQL”,而不能匹配字符串“My SQL”。如果使用多个连续的下画线匹配多个连续的字符,下画线之间不能有空格。
查询员工名字ename长度为3且以字符” 一 ”结尾的员工信息
在上述SELECT语句中,使用LIKE进行模糊查询,字符串“一”之前使用2个__通配符为任意的2个字符占位;由执行结果可知,SELECT语句按要求查询出姓名长度为3且以字符“一”结尾的员工信息。
逻辑运算符又称布尔运算符,用于判断表达式的真假。
运算符NOT和 ! 都表示逻辑非,返回和操作数相反结果。
查询员工deptno不是10和30的员工信息
在使用SELECT语句查询数据时,有时为了使执行结果更精确,可以使用多个查询条件。在MySQL中,可以使用AND运算符连接两个或多个查询条件,只有满足所有条件的记录才会被返回。
语法格式:
SELECT *| { 字段名1 , 字段名2 , ...} FROM 表名 WHERE 条件表达式1 AND 条件表达式2 ...AND条件表达式n ;
从上面的语法格式可以看到,在WHERE关键字后面跟了多个条件表达式,条件表达式之间用AND运算符连接。
使用AND连接多个条件表达式时,查询出的数据需要满足所有条件表达式的结果。
查询员工表中职位job为分析员且所属部门编号deptno为20的员工信息
除此之外,AND运算符还可以结合BETWEEN运算符判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则字段的值将被查询出来,反之则不会被查询出来。
语法格式:
SELECT *| { 字段名1 , 字段名2 , ...} FROM 数据表名 WHERE 字段名 [ NOT ] BETWEEN 值1 AND 值2 ;
在上述语法格式中,值1表示范围条件的起始值,值2表示范围条件的结束值。NOT是可选项,表示查询指定范围之外的记录,通常情况下值1需要小于值2,否则查询不到任何结果。
查询员工表中员工编号empno为9900-9935的员工信息
由执行结果可知,SELECT语句按要求查询出员工编号为9900-9935的员工信息。
如果想查询指定范围之外的记录,可以使用NOT关键字。
查询员工表中员工编号empno不是9500-9900的员工信息
在使用SELECT语句查询数据时,可以使用OR运算符连接多个查询条件。与AND运算符不同,在使用OR运算符查询时,只要满足任意一个查询条件,对应的数据就会被查询出来。
语法格式:
SELETC *| {字段名1 , 字段名2 , ...} FROM 数据表名 WHERE 条件表达式1 OR 条件表达式2 [ ...OR 条件表达式n] ;
从上述语法格式中可以看到,WHERE子句中可以有多个条件表达式,多个条件表达式之间用OR运算符分隔。
查询员工表中员工职job位为保洁或者所属部门编号deptno为30的员工信息
在上述SELECT语句中,使用OR运算符查询job字段的值是保洁或者deptno字段的值是30的记录;由执行结果可知,输出结果中的员工信息要么job字段的值是保洁,要么deptno字段的值30。 这就说明,只要记录满足OR运算符连接的任意一个条件就会被查询出来,而不需要同时满足两个条件表达式。
创建一个表,插入数据并查询