目录
一.DBMS分为两类
基于共享文件系统的DBMS :Access
给予客户机——服务器的DBMS: MySQL Oracle、SqlServer.
二.show
1.显示 show
show status; // 用于显示广泛的服务器状态信息
show create database; //显示创建特定的数据库
show create table; //显示创建特定的数据表
show grants; //用来显示授予用户的安全权限
show errors; //显示服务器错误
show warning; //显示服务器警告
help show; //显示可支持的show语句
2.显示表结构 desc,describe
显示表departments 的结构。
DESC departments;
三.select
1. 起别名as。
如果别名有特殊符号。比如说空格可以用双引号把别名引起来例如“first name”
SELECT first_name,last_name AS name FROM employees;
2.去重distinct
不能部分使用distinct
SELECT DISTINCT vend_id,prod_price FROM products; //对后面两列都是distinct
select distinct 字段名 from 表名;
3.限制结果limit
SELECT last_name FROM employees LIMIT 5;
//显示五行
SELECT last_name FROM employees LIMIT 5,6;
//从第五条记录开始,显示六行, 注意首条记录是:0
4.可以指定数据库
SELECT products.prod_name FROM crashcoutse.products;
5.数值运算 +
作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null
6.连接符concat
+只能做运算符不能做连接符。所以用CONCAT作为连接符。
SELECT CONCAT(first_name,last_name) AS name FROM employees;
7. between A and B
不能调转两个数AB,如果调转不会报错,显示的结果为空。包括端点的临界值。
8. 不等于和等于 <>, <=>
<> 不等于
<=>安全等于 如果等于返回true 不等于返回false
9.排序order by
SELECT prod_id ,prod_price FROM products ORDER BY prod_price DESC,prod_name;
//默认升序排列asc,可设置为降序desc排列。
//desc只能作用于他前面的参数。区别于distinct
//排序顺序可以不在查找的内容里。比如说上面的order by prod_name。
10.将值与串比较需要加引号,值与值比较不需要加引号;
SELECT prod_name,prod_price FROM products WHERE prod_price >= 20;
//不需要单引号
SELECT prod_name,prod_price FROM products WHERE prod_name = 'fuses';
//需要加单引号
四.where
1.and or in not
and 运算次序比or的高 为了提高可读性,在运算的时候多使用括号。
select first_name, salary from employees where salary in(2500,3500);
//只会查找2500,和3500这两个salary的值的数据
select first_name, salary from employees where salary in(2500,3500,2600);
//可以这样用。
select first_name, salary from employees where salary between 2500 and 3500;
//会查找2500~3500所有salary值的数据
MYSQL 支持NOT 对IN ,BETWEEN ,和EXISTS 句子取反。和大多数DBMS允许NOT对各种条件取反有很大差别。
2. 空置NULL检测
ifnull函数
功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;
isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
is NULL 只能用来判断是不是null不能用来判断数值。大多用在where语句里
select id from employees where age is 20;
这样写是错误的
is不能单独拿出来
有null第二条就不返回了
3.通配符———转义字符escape
//查询员工名中第二个字符为_的员工名。
SELECT last_name FROM employees WHERE last_name LIKE '_\_';
SELECT last_name FROM employees WHERE last_name LIKE '_$_'ESCAPE '$';
五.正则表达式:regexp
大致就是like 加上通配符就和regexp一样
'.'点是正则表达式:匹配任意一个字符,不能匹配空字符。
'|'类似于or
SELECT prod_name FROM products WHERE prod_name REGEXP '1000|2000'
ORDER BY prod_name;
//可匹配prod_name 中有1000或者有2000的名字
[123]定义一组字符,可从1,2,3中任意匹配一个都符合
[^123]匹配除了这些字符以外的。
SELECT prod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;
//可以匹配含有'1 Ton'或者'2 Ton'或者'3 Ton'的数据。
//相当于| 'or'
六.数据库utf8
utf8 一个汉字三个字节
GBK一个汉字两个字节。
七.函数
1.length 求字符长度
SELECT LENGTH('john'); //四个字符
SELECT LENGTH('刘清风hahaha'); //十五个字符 utf8一个中文三个字符
2.concat 连接操作
SELECT CONCAT(last_name,' ',first_name) as 'new name' FROM employees;
//concat 组合的时候可以添加字符,可以有别名。
3.upper,lower 大小写操作
SELECT UPPER('john');
//改为大写
SELECT LOWER('JOHN');
//改为小写
4.substr ,substring一样 截取字符
SELECT SUBSTR('今夜月色真美',5);
//输出 真
//索引中从1开始不是零区别于limit。
SELECT SUBSTR('今夜月色真美',3,2);
//月色
select concat(upper(substr(first_name,1,1)),substr(first_name,2),' ',upper(substr(last_name,1,1)),substr(last_name,2)) as 'new name' from employees;
//把姓首字母大写,名首字母大写合并在一块,名和姓,中间空格取别名输出
5.instr 返回子串的首个索引位置。
select instr('今晚月色真美,月色绮丽','月色');
6.trim 去前后空格,或者字符,(中间的不去)
select length(trim(' 刘 清风 ')) as out_put;
select length(trim( 'a' from ' aaa刘aa清风aaa'));
7.lpad 左填充 。rpad右填充
select lpad('刘清风', 10,'*') as out_put;
select lpad('刘清风', 2,'*') as out_put;
8.replace 替换
select replace('曾经我也想过一了百了,一了百了','一了百了','再活五百年');
八.数学函数。
1.round 四舍五入
select round(3.33);
select round(-2.59);
2.ceil 向上取整
select ceil (3.00);
select ceil(3.09);
3.向下取整。
mysql> select floor (-9.9);
+--------------+
| floor (-9.9) |
+--------------+
| -10 |
+--------------+
1 row in set (0.07 sec)
4.truncate 截断几位小数。
mysql> select truncate(1.699999,1);
+----------------------+
| truncate(1.699999,1) |
+----------------------+
| 1.6 |
+----------------------+
1 row in set (0.07 sec)
5.mod取余
mysql> select mod(10,-3);
+------------+
| mod(10,-3) |
+------------+
| 1 |
+------------+
1 row in set (0.07 sec)
九.日期函数
1.select now(); 返回当前日期
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2020-12-05 19:12:49 |
+---------------------+
1 row in set (0.07 sec)
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2020-12-05 |
+------------+
1 row in set (0.07 sec)
mysql> select curtime();
+-----------+
| curtime() |
+-----------+
| 19:13:19 |
+-----------+
1 row in set (0.07 sec)
2.获取指定年月日小时分钟。
mysql> select year(now());
+-------------+
| year(now()) |
+-------------+
| 2020 |
+-------------+
3.将指定格式转换成日期
mysql> select str_to_date('1998-3-2','%Y-%c-%d');
+------------------------------------+
| str_to_date('1998-3-2','%Y-%c-%d') |
+------------------------------------+
| 1998-03-02 |
+------------------------------------+
4.date_format 将日期转化成字符
SELECT DATE_FORMAT(now(),'%y-%m-%d');
十. 流程控制
1.if
SELECT IF(10>5,'larger','small');
2.case when then 流程控制
②case情况1
case 变量或表达式或字段
when 常量1 then 值1
when 常量2 then 值2
...
else 值n
end
③case情况2
case
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end
十一.聚集函数
1.sum, avg, 只支持数值型
max, min,count;可以处理任何类型
五个函数都忽略了null值,都支持distinct
SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
SELECT MAX(salary) FROM employees;
SELECT MIN(salary) FROM employees;
SELECT COUNT(salary) FROM employees; //为空的值有几个
2.count详解
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;
SELECT COUNT(字段) FROM employees;
//都是求数据量, 前两者差不多。
//第三个要判断字段值是不是空,比较慢,求得数也不是所有字段的总量,是某字段不为null的总量
//因为一条数据总有一个不是null,所以第一个第二个都是。所有字段总量。
十二.分组筛选
1.分组前的筛选
2.分组后的筛选
注意having 用来代替where
3.按多个字段分组