一、SQL的认识
(一)、SQL解释:
sql(structure query language)结构化查询语言
(二)、sql 的三种注释
1. # 注释的文字
2. -- 注释的文字
3. /* 注释的文字 */
(三)、sql的常见操作
1.改变活动的数据 库。 use 数据库名(表示切换到当前使用数据库)
2.sql不区分大小写,一般来讲 表名、列名 、库名小写 ,关键字大写
3.每一条sql语句结尾 用分号
(四)、sql的常见数据类型
/*
数值型:整数和小数
整数:int
小数:float、double
字符型:
varchar(长度) 可变长度的字符串(耗用空间小,效率低)
char(长度) 固定长度的字符串(耗用空间大,效率高)
text 较长的文本
日期型:
datetime
*/
二、SQL之DML语言之 SELECT (最基础的简单查询)
(一)、查询SELECT
基本查询
1、查询全部行和列
【语法】: select * from 表名
2、查询部分列
【语法】: select 列名,列名 from 表名
3、使用条件运算符或逻辑运算符实现条件查询
【语法】: select 列名,列名 from 表名 where 条件
4、最基本的查询
/*
关系运算符:> < >= <= = <>(!=)
逻辑运算符: and or not
*/
【案例】:
//查询表中字段department_id在(80~100)之间的员工详细信息
select * from 表名 where department_id>80 and department_id<100
//查询表中字段job_id=‘IT’ 或 字段 salary为1200的记录详细信息
select * from 表名 where job_id<>'IT' or salary=12000
<5> 起别名
SELECT employee_id 员工编号,first_name 名称,
last_name 姓 FROM Employees;
SELECT employee_id AS '员工编号',first_name AS '名
称',last_name AS '姓' FROM Employees;
6、 查询部分行(条件查询)
6-1 使用条件运算符(关系运算符)
工资大于10000
SELECT * FROM employees WHERE salary>10000;
工资大于10000并且小于15000
SELECT * FROM employees WHERE salary<10000;
工资等于12000
SELECT * FROM employees WHERE salary=12000;
工资不等于12000
SELECT * FROM employees WHERE salary!=12000;
6-2 使用逻辑运算符
工资大于10000并且小于15000
SELECT * FROM employees WHERE salary<10000 AND salary>=8000;
编号大于200或者小于110
SELECT * FROM employees WHERE employee_id<110 OR employee_id>200;
工资大于10000并且小于15000
SELECT * FROM employees WHERE NOT(salary<10000 AND salary>=8000);
三、MySql 的几个基本函数使用
(一)、mysql中的函数
/*
单行函数: 提供一个值,返回 一个结果
日期函数:now 获取当前日期
字符函数:对字符型进行处理
数学函数:对数值型进行处理
分组函数:(聚合函数) 提供一组值,返回 一个统计结果
*/
1、单行函数
<1>. 日期函数
SELECT NOW(); 获取当前时间
<2>.字符函数
大写
SELECT UPPER('AbCd'); //全转大写
//查询字段last_name 起别名为:大写名字
SELECT UPPER(last_name) 大写的姓名 FROM employees;
小写
SELECT LOWER('AbCd');
//查询字段last_name 起别名为:小写名字
SELECT LOWER(last_name) 小写的姓名 FROM employees;
<3>.字符串连接
使用CONCAT()
SELECT CONCAT(first_name,’ ‘,last_name) FROM employees;
例子:
//将大写的姓名连接起来并输出
SELECT UPPER(CONCAT(first_name,' ',last_name)) FROM employees;
//将大写的姓 小写的名连接起来并输出
SELECT CONCAT(UPPER(first_name),' ',LOWER(last_name)) FROM employees;
<4>.截取字符串
/*
SELECT SUBSTR('HelloWorld',1,2) //结果He
sql索引从1开始
参数1:完整的字符串
参数2:起始索引
参数3:截取的长度
*/
<5>获取字节长度
SELECT LENGTH('Hello中') //UTF-8编码 结果为8 GBK编码为7
SELECT LENGTH('中') //UTF-8编码 结果为3 GBK编码可以为2
<6>获取指定字符的索引,如果没有返回0(因为索引从1开始 不存在可以取0)
SELECT INSTR('HelloWorld', 'q')
<7>显示指定位数,不够的用指定符号填充
lpad 在左边填充,rpad 在右边填充
例如:
SELECT LPAD(salary,10,'*') FROM employees;
SELECT RPAD(salary, 10, '%') FROM employees;
<8>去前后 指定的字符,中间的去不掉
SELECT TRIM(' ' FROM ' hello world ') space
SELECT LENGTH(TRIM(' ' FROM ' hello world ')) space
<9> 替换指定的字符
//将l替换为x
SELECT REPLACE('abcdlll','l','x')
2、 数学函数
<1>truncate 截断,保留指定位数,多余的直接截断,没有四舍五入
SELECT TRUNCATE(13.567,2);// 结果13.56
SELECT TRUNCATE(13.567,0);// 结果13
SELECT TRUNCATE(13.567,-1);// 结果10
<2>round 四舍五入
SELECT ROUND(1234.53,1);//1234.5
<3>mod 取余 相当于java中 的% 等价于: 被除数-被除数/除数*除数
SELECT MOD(-15,7);//结果-1
2、分组函数
/*
max求最大值 (支持 数值、字符、日期类型)
min求最小值支持 (数值、字符、日期类型)
sum 求和 (支持数值型)
avg 求平均值 (支持数值型)
count 计算非null的个数
count(*) 表中的行数
*/
例如:
SELECT MAX(salary) 最高工资,MIN(salary) 最低工资,SUM(salary) 和,AVG(salary) 平均,
COUNT(salary) 个数
FROM employees;
各方法测试如下:
SELECT * FROM employees;
SELECT MAX(*) FROM employees;
SELECT MIN(first_name) FROM employees;
SELECT SUM(first_name) FROM employees;
SELECT AVG(first_name) FROM employees;
COUNT使用例如:
该列非空的值的个数
SELECT COUNT(first_name) FROM employees;
SELECT COUNT(commission_pct) FROM employees;
显示表中的行数
SELECT COUNT(*) FROM employees;
(二)、条件表达式
语法:
case 判断的字段
when 值 then 结果
when 值 then 结果
...
else 结果
end
案例:
查询部门号为 10, 20, 30 的员工信息, 若部门号为 10,
则打印其工资的 1.1 倍, 20 号部门, 则打印其工资的 1.2 倍,
30 号部门打印其工资的 1.3 倍数
//用普通的switch case 实现:
switch(department_id){
case 10:syso(salary*1.1);break;
case 20:syso(salary*1.2);break;
case 30:syso(salary*1.3);break;
default:syso(salary);break;
//使用MySql条件表达式实现
SELECT department_id,salary 原始工资,
CASE department_id
WHEN 10 THEN salary*1.1
WHEN 20 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END 新工资
FROM employees
WHERE department_id IN(10,20,50,90,100);
//判断查询 if()成立则bad 否则 是 good
SELECT employee_id,commission_pct,
IF(commission_pct IS NULL,'bad','good')
FROM employees;