导入学习数据库
- source /opt/yiibaidb.sql
SQL是什么?MySQL是什么?
- SQL是结构化查询语言(Structured Query Language)。
- SQL是一种专门用来与数据库沟通的语言。
- MySQL是一个关系型数据库管理系统。
查询语句 SELECT FROM
- 语句解释
- SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)
- Java 中返回 ResultSet
- 去重语句
- select distinct colnum from table;
- 前N个语句
- select colnum from limit n offset 0;
- 从第1行开始
- CASE…END判断语句
*
筛选语句 WHERE
- 语句解释
- 数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会 根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指 定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。
- 确定值是否为NULL,不能简单地检查是否= NULL。SELECT语句有一个 特殊的WHERE子句,可用来检查具有NULL值的列。这个WHERE子句就 是IS NULL子句。
- select xxx from table where xxx is (not) NULL;
- 运算符/通配符/操作符
- or and and优先级高 (xx or xxx) and xxxx
- in (xx,xx) 范围
- not 否定
- %表示任何字符出现任意次 数
- _ 匹配一个
- like `xxx%`
- 通配符%看起来像是可以匹配任何东西,但有个例外,这就是 NULL。 子句WHERE prod_name LIKE '%'不会匹配产品名称为NULL的行。
分组语句 GROUP BY
- 聚集函数
- AVG—返回平均值
- COUNT()–返回行数
- FIRST()–返回第一个记录的值
- LAST()–返回最后一个记录的值
- MAX()–返回最大值
- MIN()–返回最小值
- SUM()–返回总和
- ABS()–返回绝对值
- 语句解释
- 相同的分为一组
- HAVING子句
- 在分组的基础上进行筛选
排序语句 ORDER BY
- 语句解释
- SELECT prod_name FROM Products ORDER BY prod_name(对prod_name列以字母顺序排序数据)
- 正序、逆序
- DESC降序,默认升序(ASC)
函数
- 时间函数
- AddDate() 增加一个日期(天、周等)
- AddTime() 增加一个时间(时、分等)
- CurDate() 返回当前日期
- CurTime() 返回当前时间
- Date() 返回日期时间的日期部分
- DateDiff() 计算两个日期之差
- Date_Add() 高度灵活的日期运算函数
- Date_Format() 返回一个格式化的日期或时间串
- Day() 返回一个日期的天数部分
- DayOfWeek() 对于一个日期返回星期几
- Hour() 返回一个时间的小时部分
- Minute() 返回一个时间的分钟部分
- Month() 返回一个日期的月份部分
- Now() 返回当前的日期和时间
- Second() 返回一个时间的秒部分
- Time() 返回当前的日期时间的时间部分
- Year() 返回一个日期的年份部分
- 数值函数
- ABS() 返回一个数的绝对值
- COS() 返回一个角度的余弦
- EXP() 返回一个数的指数值
- MOD() 返回除操作的余数
- PI() 返回圆周率
- RAND() 返回一个随机数
- SIN() 返回一个角度的正弦
- SQRT() 返回一个数的平方根
- TAN() 返回一个角度的正切
- 字符串函数
- UCASE()–将某个字段转换为大写
- LCASE()–将某个字段转换为小写
- MID()–从某个文本字段提取字符
- SubString(字段,1,end)–从某个文本字段提取字符
- LEN()–返回某个文本字段的长度
- ROUND()–对某个数值字段进行指定小数位数的四舍五入
- NOW()–返回当前的系统日期和时间
- FORMAT()–格式化某个字段的显示方式
SQL注释
- 分单行注释和多行注释:
- 单行注释使用
--
- 多行注释采用
/*…*/
SQL代码规范
- [SQL编程格式的优化建议] https://zhuanlan.zhihu.com/p/27466166
- [SQL Style Guide] https://www.dsqlstyle.guide/
查找所有重复的电子邮箱
select email from email group by email having count(email) > 1;
查找大国
select name,population,area from world where area>3000000 or (population>25000000 and gdp>20000000);