导入示例数据库
mysql> use yiibaidb;
mysql> source D:\SQL/yiibaidb.sql;
SQL是什么?MySQL是什么?
SQL:结构化查询语言,专门用来操作数据库的标准化语言。
MySQL 是最流行的关系型数据库管理系统。
查询语句 SELECT FROM
语句解释
想选择什么,以及从什么地方选择
SELECT
column_name1, column_name2, ...
FROM
table_name
[INNER | LEFT |RIGHT] JOIN table_2 ON conditions
WHERE
conditions
GROUP BY column_name1
HAVING group_conditions
ORDER BY column_name1
LIMIT offset, length;
**关键词介绍:**
SELECT 语句由以下列表中所述的几个子句组成:
SELECT 之后是逗号分隔列或星号(*)的列表,表示要返回所有列。
FROM 指定要查询数据的表或视图。
JOIN 根据某些连接条件从其他表中获取数据。
WHERE 过滤结果集中的行。
GROUP BY 将一组行组合成小分组,并对每个小分组应用聚合函数。
HAVING 过滤器基于GROUP BY子句定义的小分组。
ORDER BY 指定用于排序的列的列表。
LIMIT 限制返回行的数量。
去重语句
SELECT DISTINCT
columns
FROM
table_name
WHERE
上图可以发现Bondur,Firrelli重复了,使用SELECT DISTINCT可以去掉重复
前N个语句
使用LIMIT子句,LIMIT offset , count;
offset :指定要返回的第一行的偏移量。第一行的偏移量是0,而不是1
count :指定要返回的最大行数
这里LIMIT 5就只返回了5行数据
CASE…END判断语句
CASE…WHEN…THEN…END两种结构
1.简单的CASE函数
CASE SEX
WHEN '1' THEN '男'
WHEN '0' THEN '女'
ELSE '其他' END
2.CASE搜索函数
CASE
WHEN SEX ='1' THEN '男'
WHEN SEX ='0' THEN '女'
ELSE '其他'
END
```
**注:**这两种方式,可以实现相同的功能。简单CASE函数的书写方法相对比较简介,但是和CASE搜索函数相比,功能方面会有些限制,CASE函数只返回一个符合条件的值,剩下的CASE部分将会被忽略。
Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略
筛选语句 WHERE
语法
SELECT column_name1,column_name2
FROM table_name
WHERE column_name operator value;
语句解释
允许根据指定的过滤表达式或条件来指定要选择的行。
实例
图1为customers表中所有记录,图二为creditLimit大于10000的记录
图1
图2
运算符/通配符/操作符
运算符
运算符 | 描述 |
---|---|
= | 等于 |
<>(!=) | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BEWEEN | 在某范围内 |
LIKE | 搜索某种模式 |
IN | 指定针对某个列的多个可能值 |
通配符
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL 通配符用于搜索表中的数据。
通配符 | 描述 |
---|---|
% | 替代 0 个或多个字符 |
_ | 替代一个字符 |
[charlist] | 字符列中的任何单一字符 |
[^charlist]或[!charlist] | 不在字符列中的任何单一字符 |
操作符
操作符 | 描述 |
---|---|
IN 操作符 | IN 操作符允许您在 WHERE 子句中规定多个值。 |
BETWEEN 操作符 | BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期 |
LIKE 操作符 | LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式 |
IN 操作符语法:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
BTWEEN操作符语法:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
LIKE操作符语法:
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
分组语句 GROUP BY
聚集函数
传回选取的结果集中行的数目
语法:
SELECT COUNT(column_name) FROM table_name
语句解释
HAVING子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。HAVING 子句可以让我们筛选分组后的各组数据
语法:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
**HAVING** aggregate_function(column_name) operator value;
排序语句 ORDER BY
语句解释
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。
ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序记录进行排序,可以使用 DESC 关键字。
语法:
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
正序、逆序
DESC 为降序,默认为升序,且DESC只对紧跟着的第一个列名有效
函数
时间函数
NOW() 函数
返回当前系统的日期和时间
语法:
SELECT NOW() FROM table_name;
数值函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
AVG() - 返回平均值
COUNT() - 返回行数
FIRST() - 返回第一个记录的值
LAST() - 返回最后一个记录的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回总和
字符串函数
SQL Scalar 函数基于输入值,返回一个单一的值。
有用的 Scalar 函数:
UCASE() - 将某个字段转换为大写
LCASE() - 将某个字段转换为小写
MID() - 从某个文本字段提取字符,MySql 中使用
SubString(字段,1,end) - 从某个文本字段提取字符
LEN() - 返回某个文本字段的长度
ROUND() - 对某个数值字段进行指定小数位数的四舍五入
NOW() - 返回当前的系统日期和时间
FORMAT() - 格式化某个字段的显示方式
SQL注释
样式1:从 – 到行尾
双重冲突注释样式至少需要在第二个破折号之后的空格或控制字符(空格,制表符,换行符等)。
SELECT * FROM users; -- This is a comment
:样式2:
SELECT
lastName, firstName
FROM
employees
WHERE
reportsTo = 1002; # get subordinates of Diane
样式3:C语言风格的注释/* */可以跨越多行。您使用此注释样式记录一个SQL代码块。
/*
Get sales rep employees
that reports to Anthony
*/
SELECT
lastName, firstName
FROM
employees
WHERE
reportsTo = 1143
AND jobTitle = 'Sales Rep';
SQL代码规范
详细规范整理 https://www.cnblogs.com/gzhcsu/p/7832148.html
参考资料:
https://www.yiibai.com/mysql/
http://www.runoob.com/sql/sql-tutorial.html
CASE END参考> http://www.cnblogs.com/prefect/p/5746624.html