语法:select 查询列表 from 表名;(类似于:System.out.println(打印东西);)
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
一,基础查询
1.查询表中的单个字段
SELECT 属性名 FROM 表名;
2.查询表中的多个字段
SELECT 属性名,属性名,属性名 FROM 表名;
查询常量值
SELECT 100;
SELECT ‘john’;
查询表达式
SELECT 100%98;
6.查询函数
SELECT VERSION();
起别名
1,便于理解
2,如果要查询的字段有重名的情况,使用别名可以区分开来
方式一:使用as
SELECT 100%98 AS 结果;
SELECT 属性名 AS 别名 , 属性名 AS 别名 FROM 表名;
方式二:使用空格
SELECT 属性名 别名 , 属性名 别名 FROM 表名;
去重
查询某个表涉及到的部门id
SELECT DISTINCT 属性名 FROM 表名;
+号的作用
java中的+号:
1,运算符,两个操作数都为数值型
2,连接符,只要有一个操作数为字符串
mysql中的+号:
仅仅只有一个功能:运算符
select 100+90; 两个操作数都为数值型,则做加法运算
select ‘123’+90;只要其中一方为字符型,试图将字符型数值转换成数值型,如果转换成功,则继续做加法运算
select ‘john’+90;如果转换失败,则将字符型数值转换成0
select null+10; 只要其中一方为null,则结果肯定为null
案例:查询员工名和姓连接成一个字段,并显示为 姓名
SELECT CONCAT(‘a’,‘b’,‘c’) AS 结果;
SELECT CONCAT(last_name,first_name) AS 姓名 FROM t_mysql_employees;
二,过滤和排序数据
过滤查询案例
语法:select 查询列表 from 表名 where 筛选条件;
1,按条件表达式筛选
简单条件运算符:> < = != <> >= <=
2,按逻辑表达式筛选
逻辑运算符:作用:用于连接条件表达式
&& || !
and or not
&&和and:两个条件都为true,结果为true,反之为false
||或or: 只要有一个条件为true,结果为true,反之为false
!或not: 如果连接的条件本身为false,结果为true,反之为false
3,模糊查询
like
between and
in
is null|is not null
3.1 like
特点:一般和通配符搭配使用
通配符:1,% 任意多个字符,包含0个字符 2,_ 任意单个字符
查询员工名中第二个字为a的员工信息
select * from 表名 where 属性名 like ‘_a%’;
3.2 between and
1,使用between and 可以提高语句的简洁度
2,包含临界值
3,两个临界值不要调换顺序
查询员工编号在100到120之间的员工信息
SELECT * FROM 表名 WHERE 属性名<= 120 AND 属性名>=100;
3.3 in
含义:判断某字段的值是否属于in列表中的某一项
特点:
1,使用in提高语句简洁度
2,in列表的值类型必须一致或兼容
3,in列表中不支持通配符
案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT last_name, job_id FROM 表名 WHERE job_id IN
( ‘IT_PROT’ ,‘AD_VP’,‘AD_PRES’);
3.4 is null
=或<>不能用于判断null值 is null或is not null 可以判断null值
查询没有奖金的员工名和奖金率
SELECT 属性名(员工名), 属性名(奖金率) FROM 表名 WHERE 属性名(奖金率) IS NULL;
查询有奖金的员工名和奖金率
SELECT 属性名(员工名), 属性名(奖金率)FROM 表名 WHERE 属性名(奖金率) IS NOT NULL;
3.5 安全等于 <=>
查询工资为12000的员工信息
SELECT
属性名(员工名),属性名(工资)FROM 表名 WHERE 属性名(工资)<=> 12000;
is null pk <=>
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
4,order by 子句
语法:select 查询列表 from 表名 【where 筛选条件】 order by 排序的字段或表达式;
特点:
1、asc代表的是升序,可以省略 desc代表的是降序
2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段
3、order by子句在查询语句的最后面,除了limit子句
查询部门编号>=90的员工信息,并按员工编号降序
SELECT *FROM 表名 WHERE 属性名(员工编号)>=90 ORDER BY 属性名(员工编号)DESC;
5,分组查询
功能:用作统计使用,又称为聚合函数或统计函数或组函数
分类:
sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
特点:
1、sum、avg一般用于处理数值型 max、min、count可以处理任何类型
2、以上分组函数都忽略null值
3、可以和distinct搭配实现去重的运算
4、count函数的单独介绍 一般使用count(*)用作统计行数
5、和分组函数一同查询的字段要求是group by后的字段
可和distinct(去重)搭配
SELECT SUM(DISTINCT 属性名) FROM 表名;
效率:
MYISAM存储引擎下 ,COUNT()的效率高
INNODB存储引擎下,COUNT()和COUNT(1)的效率差不多,比COUNT(字段)要高一些
到这里就结束了,有不对或补充的地方欢迎大家评论,谢谢!