DQL语言的学习进阶1基础查询语法SELECT 要查询的东西【FROM 表名】;类似于Java中 :System.out.println(要打印的东西);特点①通过select查询完的结果 是一个虚拟的表格不是真实存在② 要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数进阶2条件查询条件查询根据条件过滤原始表的数据查询到想要的数据语法select要查询的字段|表达式|常量值|函数from表where条件 ;分类一、条件表达式示例salary10000条件运算符 ! 二、逻辑表达式示例salary10000 salary20000逻辑运算符and:两个条件如果同时成立结果为true否则为falseor(||)两个条件只要有一个成立结果为true否则为falsenot(!)如果条件成立则not后为false否则为true三、模糊查询示例last_name like a%进阶3排序查询语法select要查询的东西from表where条件order by 排序的字段|表达式|函数|别名 【asc|desc】进阶4常见函数一、单行函数1、字符函数concat拼接substr截取子串upper转换成大写lower转换成小写trim去前后指定的空格和字符ltrim去左边空格rtrim去右边空格replace替换lpad左填充rpad右填充instr返回子串第一次出现的索引length 获取字节个数2、数学函数round 四舍五入rand 随机数floor向下取整ceil向上取整mod取余truncate截断3、日期函数now当前系统日期时间curdate当前系统日期curtime当前系统时间str_to_date 将字符转换成日期date_format将日期转换成字符4、流程控制函数if 处理双分支case语句 处理多分支情况1处理等值判断情况2处理条件判断5、其他函数version版本database当前库user当前连接用户二、分组函数sum 求和max 最大值min 最小值avg 平均值count 计数特点1、以上五个分组函数都忽略null值除了count(*)2、sum和avg一般用于处理数值型max、min、count可以处理任何数据类型3、都可以搭配distinct使用用于统计去重后的结果4、count的参数可以支持字段、*、常量值一般放1建议使用 count(*)进阶5分组查询语法select 查询的字段分组函数from 表group by 分组的字段特点1、可以按单个字段分组2、和分组函数一同查询的字段最好是分组后的字段3、分组筛选针对的表 位置 关键字分组前筛选 原始表 group by的前面 where分组后筛选 分组后的结果集 group by的后面 having4、可以按多个字段分组字段之间用逗号隔开5、可以支持排序6、having后可以支持别名进阶6多表连接查询笛卡尔乘积如果连接条件省略或无效则会出现解决办法添加上连接条件一、传统模式下的连接 等值连接——非等值连接1.等值连接的结果 多个表的交集2.n表连接至少需要n-1个连接条件3.多个表不分主次没有顺序要求4.一般为表起别名提高阅读性和性能二、sql99语法通过join关键字实现连接含义1999年推出的sql语法支持等值连接、非等值连接 内连接外连接交叉连接语法select 字段...from 表1【inner|left outer|right outer|cross】join 表2 on 连接条件【inner|left outer|right outer|cross】join 表3 on 连接条件【where 筛选条件】【group by 分组字段】【having 分组后的筛选条件】【order by 排序的字段或表达式】好处语句上连接条件和筛选条件实现了分离简洁明了三、自连接案例查询员工名和直接上级的名称SELECT e.last_name,m.last_name FROM employees eSELECT e.last_name,m.last_name FROM employees e,employees m进阶7子查询含义一条查询语句中又嵌套了另一条完整的select语句其中被嵌套的select语句称为子查询或内查询在外面的查询语句称为主查询或外查询特点1、子查询都放在小括号内2、子查询可以放在from后面、select后面、where后面、having后面但一般放在条件的右侧3、子查询优先于主查询执行主查询使用了子查询的执行结果4、子查询根据查询结果的行数不同分为以下两类① 单行子查询结果集只有一行一般搭配单行操作符使用 非法使用子查询的情况a、子查询的结果为一组值b、子查询的结果为空② 多行子查询结果集有多行一般搭配多行操作符使用any、all、in、not inin 属于子查询结果中的任意一个就行any和all往往可以用其他查询代替进阶8分页查询应用场景实际的web项目中需要根据用户的需求提交对应的分页查询的sql语句语法select 字段|表达式,...from 表【where 条件】【group by 分组字段】【having 条件】【order by 排序的字段】limit 【起始的条目索引】条目数;特点1.起始条目索引从0开始2.limit子句放在查询语句的最后3.公式select * from 表 limit page-1*sizePerPage,sizePerPage假如:每页显示条目数sizePerPage要显示的页数 page进阶9联合查询引入union 联合、合并语法select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】select 字段|常量|表达式|函数 【from 表】 【where 条件】 union 【all】.....select 字段|常量|表达式|函数 【from 表】 【where 条件】特点1、多条查询语句的查询的列数必须是一致的2、多条查询语句的查询的列的类型几乎相同3、union代表去重union all代表不去重基础查询一、语法select查询列表from表名;二、特点1、查询列表可以是字段、常量、表达式、函数也可以是多个2、查询结果是- -个虚拟表三、示例1、查询单个字段select字段名from 表名;2、查询多个字段select字段名,字段名from表名;3、查询所有字段select * from表名4、查询常量select常量值;注意:字符型和日期型的常量值必须用单引号引起来数值型不需要5、查询函数select函数名(实参列表) ;6、查询表达式select 100/1234;7、起别名①as②空格8、去重select distinct字段名from 表名:9、作用:做加法运算select数值数值;直接运算select字符数值;先试图将字符转换成数值,如果转换成功则继续运算;否则转换成0,再做运算select nul1值;结果都为null10、[补充] concat函数功能:拼接字符select concat(字符1,字符2,字符...:11、[补充] ifnul1函数功能:判断某字段或表达式是否为null,如果为null返回指定的值否则返回原本的值select ifnull (comission. pct,0) from employees;12、[补充] isnu11函数功能:判断某字段或表达式是否为null,如果是则返回1,否则返回0条件查询一、语法select查询列表from表名where筛选条件二、筛选条件的分类1、简单条件运算符 ! 安全等于2、逻辑运算符 and|I or! not3、模糊查询like:一般搭配通配符使用可以判断字符型或数值型通配符: %任意多个字符_任意单个字符between andinis null /is not mull:用于判断nul1值is null PK 普通类型的数值 null值 可读性is null 否 是 是 是 是 否