SELECT colName1,colName2,colName3,.. FROM tName [约束]
SELECT 选择查询列表 FROM 提供数据源(表、视图或者其他数据源)
//查询所有的列,显示顺序和创建表中的顺序一致
SELECT * FROM tName
=======================================
全列/投影查询
=======================================
练习
1,查询所有员工信息
select * from emp;
2,查询每个员工的编号、姓名、职位
select empno,ename,job form emp;
3,查询所有部门信息
select * from dept;
SELECT DISTINCT colName FROM tName
=======================================
消除重复
=======================================
distinct关键字可以用于一列,也可以用于多列
练习
1,查询所有有员工的部门编号
select distinct deptno from emp;
2,查询哪些部门和职位有员工
select distinct job,deptno from emp;
只有当job和deptno相同,才认为是重复的数据。
WHERE colName IS NULL
=======================================
空值判断
=======================================
空值:
1、空值是指不可用、未分配的值,也就是没有值。
2、空值不等于零或空格
3、任意类型都可以支持空值,也就是说任何类型的字段都可以允许空值作为值的存在
*注意:包括空值的任何算术表达式都等于空
练习:
查询所有员工的年终奖((月薪+奖金)*12)
select ename,(IFNULL(comm,0)+sal)*12 '年薪' from emp ;
函数:IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2
使用IS NULL(IS NOT NUll)运算符
1,查询有奖金的员工信息
SELECT * from emp where comm is not NULL;
2,查询公司的老板
select * from emp where mgr is null;
使用WHERE子句限定返回的记录
SELECT colName1,colName2 FROM tName [WHERE 限制条件 AND/OR 限制条件2]
=======================================
限定查询
=======================================
注意:
1、字符串和日期要用单引号扩起来
2、数字类型直接书写
3、字符串是大小写不敏感的,日期值是格式敏感的
4、字符串敏感,需要添加binary关键字
练习
要求查询出基本工资高于1500的所有员工信息
select * from emp where sal >= 1500;
1,查询名字叫SCOTT的员工所从事的工作
select * from emp where ename = 'scott';
严格区分大小写,binary
select * from emp where binary ename = 'SCOTT';
2,查询1981年入职的员工信息.
select * from emp where hiredate between '1981-01-01' and '1981-12-31';
WHERE colName in(value1,value2...)
使用LIKE运算符执行通配符查询,查询条件可包含文字字符或数字, 使用LIKE运算符LIKE运算符必须使用通配符才有意义:
通配符:用来实现匹配部分值的特殊字符
匹配单个字符:_; -> 1个
匹配任意多个字符:%; -> 0个、1个、多个
=======================================
like运算符
=======================================
1.查询出所有雇员姓名是以A开头的全部雇员信息。
select * from emp where ename like 'A%';
2.查询出雇员姓名第二个字母是M的全部雇员信息。
select * from emp where ename like '_M%';
3.查询出雇员姓名任意位置上包含字母A的全部雇员信息。
select * from emp where ename like '%a%';
AND | 组合条件都是TRUE,返回TRUE |
OR | 一个条件为TRUE,返回TRUE |
NOT | 如果跟上的条件为TRUE,返回FALSE |
SELECT * FROM tName ORDER BY colName [DESC\ASC]
按多列排序(先后)
SELECT * FROM tName ORDER BY colName1 [DESC\ASC],colName2 [DESC\ASC]
列的别名排序(别名使用单引号之后不能排序)
SELECT colName AS cn FROM tName ORDER BY cn [DESC\ASC]
SELECT colName AS 'c n' FROM tName ORDER BY 'c n' [DESC\ASC] FALSE
=======================================
1.改变列的标题头
2.用于表示计算结果的含义
3.作为列的表名
4.如果别名中使用特殊字符,或者强制大小写敏感,或者有空格的时候,都需要加单引号(不建议使用列的别名使用单引号,因为一旦使用,该列不能排序)
5.as可以省略(不建议省略)
SELECT colName as newName FROM tName
聚合函数作用于一组数据,并且对一组数据返回一个值
统计结果记录数:COUNT
统计计算最大值:MAX
统计计算最小值:MIN
统计计算求和: SUM
统计计算平均值:AVG
SELECT AVG(colName1) FROM tName
SELECT COUNT(*)\COUNT(id) FROM tName
=======================================
=======================================
单行函数--->字符函数
=======================================
(1).字符串大小写转换
LOWER(str):返回字符串str变为小写字母的字符
UPPER(str):返回字符串str变为大写字母的字符
--------------------------------------------------------
把HelloWorld转换为全大写,全小写.
select LOWER('HelloWorld');
select UPPER('HelloWorld');
(2).字符串拼接
CONCAT(str1,str2,...):
1,返回结果为连接参数产生的字符串。
2,如有任何一个参数为NULL ,则返回值为 NULL
3,允许有一个或多个参数
-------------------------------------------------------
1,查询所有员工的全名
select CONCAT('查询出',ename,'的全名') from emp;
2,查询得到输出结果:某某's'的月薪是:xx
select CONCAT(ename,'的月薪是',sal) from emp;
(3).查看字符串长度
CHAR_LENGTH:字符串长度;
LENGTH:字符串长度(单位为字节);
对比试验:
SELECT CHAR_LENGTH('龙哥17岁') FROM DUAL;
SELECT LENGTH('龙哥17岁') FROM DUAL;
(4).字符串填补
LPAD(str,len,padstr)
1,返回字符串str, 其左边由字符串padstr 填补到len字符长度。
2,假如str 的长度大于len, 则返回值被缩短至len 字符。
SELECT LPAD('ABC',7,'X'),LPAD('ABC',5,'X'),LPAD('ABC',3,'X'),LPAD('ABC',1,'X') FROM DUAL;
返回的结果是XXXXABC XXABC ABC A
RPAD(str,len,padstr)
1,返回字符串str, 其右边被字符串padstr填补至len 字符长度。
2,假如字符串str 的长度大于 len,则返回值被缩短到与len 字符相同长度。
(5).字符串去空格
LTRIM(str):左边空格被trim掉;
RTRIM(str):右边空格被trim掉;
TRIM(str)=LTRIM+RTRIM
TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str):高级用法,从str中按照指定方式截取remstr;
TRIM(remstr FROM] str):相当于TRIM(BOTH remstr FROM str);
SELECT LTRIM(' A B C '),RTRIM(' A B C '),TRIM(' A B C ') FROM DUAL;
返回的结果是 A B C_ _A B C A B C
(6).字符串替换
REPLACE(str,from_str,to_str):
1,在str中把from_str全部替换为to_str;
2,大小写敏感;
SELECT REPLACE('ABCDaBCABA','A','X') FROM DUAL;
XBCDaBCXBX
(7).字符串截取
SUBSTRING(str,pos):
从字符串str返回一个子字符串,起始于位置pos
SELECT SUBSTRING('asdfghijkl', 3); [0,3) dfghijkl
SUBSTRING(str,pos,len):
从字符串str返回一个长度同len字符相同的子字符串,起始于位置pos
SELECT SUBSTRING('asdfghjkl', 3, 2); df
如果pos是负数,从字符串尾部开始计算;
SELECT SUBSTRING('ABCDEF',-3),SUBSTRING('ABCDEF',-3,3) FROM DUAL;
def def
=======================================
单行函数--->数字函数
=======================================
(1).取绝对值
ABS(x):返回一个数字的绝对值;
SELECT ABS(-17),ABS(17) FROM DUAL;
17 17
(2).取模
MOD(N,M):返回N 被 M除后的余数;
SELECT MOD(10,5),MOD(10,3) FROM DUAL;
0 1
(3).取天花板
CEIL(x):返回不小于X 的最小整数值;
SELECT CEIL(0.5),CEIL(-1.5),CEIL(1.5) FROM DUAL;
1 -1 2
(4).取地板
FLOOR(x):返回不大于X的最大整数值;
SELECT FLOOR(0.5),FLOOR(-1.5),FLOOR(1.5) FROM DUAL;
0 -2 1
(5).四舍五入
ROUND(X) /ROUND(X,D):
1,返回参数X, 其值接近于最近似的整数。
2,在有两个参数的情况下,返回X ,其值保留到小数点后D位,而第D位的保留方式为四舍五入。
3,若要接保留X值小数点左边的D 位,可将 D 设为负值。
select ROUND(1.5);
select ROUND(1.49);
SELECT ROUND(3.1465926,2); 3.15
SELECT ROUND(321.1415926,-2);
TRUNCATE(X,D)
(6).截去函数
1,返回被舍去至小数点后D位的数字X。
select TRUNCATE(3.1415926,2);
2,若D 的值为 0, 则结果不带有小数点或不带有小数部分。可以将D设为负数,若要截去(归零) X小数点左起 第D位开始后面所有低位的值.
select TRUNCATE(3.1415926,0);
select TRUNCATE(312.1415926,-1);
=======================================
单行函数--->日期函数
=======================================
获取当前系统时间
select NOW();
DATE_ADD(date,INTERVAL expr type)/DATE_SUB(date,INTERVAL expr type)向日期添加指定的时间间隔
1,执行日期运算;
2,date 是一个 DATETIME 或DATE值,用来指定起始时间;
3,expr 是一个字符串表达式,用来指定从起始日期添加或减去的时间间隔值;
4,type 为关键词,它指示了表达式被解释的方式
SELECT DATE_ADD('2016-10-13',INTERVAL 22 DAY) FROM DUAL; 2016-11-4
SELECT DATE_ADD(NOW(),INTERVAL 100 DAY) FROM DUAL;
使用方法参考MYSQL 5.5中文参考手册547页;
--------------------------------------------------------------------------
type 参数可以是下列值:
Type 值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
SELECT CURRENT_DATE(),CURRENT_TIME() FROM DUAL;
DATEDIFF(expr,expr2):返回起始时间expr和结束时间expr2之间的天数
SELECT DATEDIFF('2016-05-08','2016-11-04')'天数' FROM DUAL;
DAY(date):获取日期中的天数(DAYOFMONTH)
select DAY(NOW());
HOUR(time)
返回time 对应的小时数。对于日时值的返回值范围是从 0 到 23
select HOUR(NOW());
MINUTE(time)
返回 time 对应的分钟数,范围是从 0 到 59
select MINUTE(NOW());
MONTH(date)
返回date 对应的月份,范围时从 1 到 12。
select MONTH(NOW());
YEAR(date)
返回date 对应的年份,范围是从1000到9999。
select YEAR(NOW());
LAST_DAY(date)
获取一个日期或日期时间值,返回该月最后一天对应的值
select LAST_DAY(NOW());
UNIX_TIMESTAMP(date):它会将参数值以'1970-01-01 00:00:00' GMT后的秒数的形式返回
FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format):返回'YYYY-MM-DD HH:MM:SS'或指定format的日期
SELECT UNIX_TIMESTAMP(NOW()) FROM DUAL;
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())) FROM DUAL;
=======================================
单行函数--->转换函数
=======================================
FORMAT(X,D)
将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后D 位, 并将结果以字符串的形式返
回。若D 为 0, 则返回结果不带有小数点,或不含小数部分。
SELECT FORMAT(123456.789,2) FROM DUAL;
格式:DATE_FORMAT(date,format):把日期转换为字符串.
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') FROM DUAL;
STR_TO_DATE(str,format):把字符串转换为日期。
SELECT STR_TO_DATE('2015/11/29','%Y/%m/%d') FROM DUAL;
单行函数可被嵌入到任何层在嵌套的时候,最内层的函数最先被执行,执行的结果被传递到它的外层函数,作为参数使用,然后依次从内向外执行,直到所有的函数执行完。
SELECT * FROM tName LIMIT ?,?;
第一个?:(currentPage-1)*pageSize
第二个?:pageSize