MYSQL 基础(2)

```mysql
# mysql  select 可以查询常量,函数, 表达式
select 100;
select "xiaomo";
select 100 * 100;
select version()
```

```mysql
#  mysql  起别名
select "xiaomo" as name;
select new_name as 姓名 from xxm;
# 默认为空格也可以
select new_name 姓名 from xxm;
# 其别名 如果为 all name 这样的 可以使用 '' 来表示。
select new_name 'all name' from xxm;
```

```mysql
# 去重 distinct
select distinct new_name from xxm;
```

```mysql
#  concat  拼接 
#  注意 null 和 任何字段拼接,结果都为null
#  如果为 null 的一列有数据 有 null 或者有值 可以使用ifnull 判断是否有值 ifnull(字段名,"默认值") : 例如: select concat(new_name, ifnull(age,0)) from xxm;
select concat(new_name,age) from xxm;
/*
运行结果:
     zhangsan22           |
    | tom22               
    | xiaohong22
*/
```

```mysql
# between and  在什么什么之间。
SELECT
    new_name,
    age 
FROM
    xxm 
WHERE
    age BETWEEN 5 
    AND 20
    
# 运行结果:
    nice    18
    nice    18
    nice    18
    nice    18
```

```mysql
# in 的使用 
SELECT id,age,new_name FROM xxm WHERE age in (520,22)
```

```mysql
# is NULL 筛选出为空的数据。
SELECT id,new_name FROM xxm WHERE new_name is NULL
# 运行结果:
    12    null
```

```mysql
# is not null  筛选出不为空的数据
SELECT id,new_name FROM xxm WHERE new_name is NOT NULL

# 运行结果:
     1    zhangsan
    2    tom
      ...
    11    moyan
```

```mysql
#  安全等于 <>  不等于 != 或者 <>
1. 可以作为普通的运算符为 = 
# 例如:
    SELECT new_name FROM xxm WHERE new_name <=> 'zhangsan'
# 运行结果:
    # zhangsan
```

```mysql
# order by 排序
# DESC 降序 , 从大到小
SELECT new_name,age FROM xxm WHERE age >= 22 ORDER BY age DESC
```

```mysql
# LENGTH 获取字符串长度
# 获取字符串长度按照降序来排序
SELECT LENGTH(new_name),new_name FROM xxm ORDER BY LENGTH(new_name) DESC
/*
运行结果:
    8    zhangsan
    8    xiaohong
    5    moyan    
*/
```

```mysql
# 字符函数
# LENGTH  获取字符串的字节数
# concat  字符拼接
# UPPER  SELECT UPPER(new_name) FROM xxm    # 将小写字母变成大写字母
# lower  SELECT LOWER(new_name) FROM xxm    # 将大写字母变成小写字母
# SUBSTR  SELECT SUBSTR(new_name,1,2) FROM xxm  # 截取字符长度,索引为一开始  这个是截取俩个字符
# SUBSTR  SELECT SUBSTR(new_name,1) FROM xxm # 获取字符一后面所有的字符
# INSTR  返回字符第一次出现的索引,如果找不到返回0
SELECT INSTR(new_name,'san'),new_name FROM xxm
/*
运行结果:
    6    zhangsan
    0    tom
    0    xiaohong    
*/
# trim 去除左右俩边的空格
SELECT TRIM(new_name) FROM xxm
# lpad  左填充 如果不够10 位 * 号 填充
SELECT LPAD(new_name,10,"*") FROM xxm
# rpad  右填充 
SELECT RPAD(new_name,10,"*") FROM xxm
# replace 将 xxm 中张三 替换成 lisi
SELECT REPLACE(new_name,'zhangsan','lisi') FROM xxm
```

```mysql
# round 四舍五入
SELECT ROUND(age) FROM xxm
# 小数点保留后俩位
SELECT ROUND(age,2) FROM xxm
# CEIL  # 返回 >= 最少整数
SELECT CEIL(age) FROM xxm
# floor 返回该<= 最大整数
SELECT CEIL(age) FROM xxm
# TRUNCATE 截断, 只保留小数点1位数
SELECT TRUNCATE(age,1) FROM xxm
# MOD  取余
SELECT MOD(age,2) FROM xxm
```

```mysql
# now 返回年月日, 时分秒
SELECT NOW()
/*
运行结果:
    2020-09-17 10:00:41
*/
# 只返回年月日

SELECT CURDATE()
/*
结果:
    2020-09-17
*/
# 只返回时分秒

SELECT CURTIME()
/*
运行结果:
    10:55:34
*/

# 获取 年月日 时分秒
SELECT YEAR(NOW()) # 年 
SELECT MONTH(NOW()) # 月
SELECT MONTHNAME(NOW()) # 英文显示
SELECT DAY(NOW())  # 日
SELECT HOUR(NOW()) # 时
SELECT MINUTE(NOW()) # 分
SELECT SECOND(NOW()) # 秒
/*
运行结果:
    2020
    9
    September
    17
    11
    1
    14
*/

/*
%Y  四位年份
%y  2位年份
%m  月份 补0 01 02
%c  月份不补 0  1 2 3 
%d  日 01 02 03 ...
%H  时 24 小时
%h  时 12 小时
%i  分 00 01 
%s  秒 00 ..
*/
# STR_TO_DATE 将 字符转换成 日期类型 
SELECT STR_TO_DATE('2020-09-17','%Y-%m-%d')

# DATE_FORMAT 将日期转换成字符
SELECT DATE_FORMAT(NOW(),"%Y")
/*
运行结果:
    2020年
*/
```

```mysql
# IF 相当于 if else 
# 有没有年龄大于或者等于520的 ,如果有返回有,如果没有返回没有
SELECT IF(age>=520,'','没有') FROM xxm

/*
运行结果:
 没有
 有
*/
```

```mysql
# CASE
SELECT id, new_name, CASE id
    WHEN 1 THEN age * 2
    WHEN 2 THEN age / 2
    # 还可以继续写 你的条件
    ELSE
        age * 10
END FROM xxm

/*
运行结果:
    1    zhangsan    44
    2    tom    11.0000
    3    xiaohong    220
    4    nice    180
*/
```

```mysql
/*
sum  求和
avg  平均值
max  最大值
min  最小值
count 计算个数
*/
# 所有 年龄的 和
SELECT SUM(age) FROM xxm
# 所有 年龄的 平均值
SELECT avg(age) FROM xxm
# 最小值
SELECT min(age) FROM xxm
# 最大值
SELECT max(age) FROM xxm
# 计算个数
SELECT count(age) FROM xxm
# 聚合函数支持 distnct
SELECT count(DISTINCT age) FROM xxm
# 日期相差值
SELECT DATEDIFF('2020-10-01','2020-09-17')
/*
运行结果:
    14
*/
```

```MYSQL
# group by 分组
# 每个年龄 的 平均年龄
SELECT AVG(age) FROM xxm GROUP BY age
# having  在group by 后面使用 having  [聚合函数]
SELECT age FROM xxm GROUP BY age HAVING AVG(age)
```

```mysql
# 内连接
SELECT * FROM teacher,xxm WHERE xxm.t_id = teacher.id
# 内连接 语法 select 字段名, 字段名 FROM 表1 INNER JOIN 表2 ON 表1.外键id = 表2.id
SELECT t_name, new_name FROM xxm INNER JOIN teacher ON xxm.t_id = teacher.id
/*
运行结果:
    toms    zhangsan
    toms    tom
*/
# 左连接, 查询出所有没有老师交的学生
SELECT xxm.id, t_id, new_name FROM xxm LEFT JOIN teacher ON teacher.id = xxm.t_id WHERE xxm.t_id = 0
/*
运行结果:
    3    0    xiaohong
    6    0    nice
    7    0    nice    
*/
# 右连接
SELECT xxm.id, new_name,t_id FROM teacher RIGHT JOIN xxm ON xxm.t_id = teacher.id WHERE xxm.t_id = 0
```

 

posted @ 2020-09-18 16:46  Handsome、Snake  阅读(127)  评论(0编辑  收藏  举报