# LearnMySqlNote
MySql的一点学习笔记
# MySQL学习笔记
## 1. 安装
(3、李玉婷2019版MySQL基础 https://www.bilibili.com/video/BV12b411K7Zu?p=253)
## 2.常用的命令
```mysql
net start MySQL服务名
net stop MySQL服务名
mysql -hlocalhost -P3306 -uroot -proot
show databases;
use mysql; 数据库
show tabes; 显示当前的数据表
show table from user; 直接显示user中的表
select database(); 查看当前的数据库
mysql> create table stuinfo(
-> stuid int,
-> stuname varchar(20),
-> gender char,
-> birthday datetime); 创建一个表
desc; 查看表的的结构
mysql> desc stuinfo;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stuid | int(11) | YES | | NULL | |
| stuname | varchar(20) | YES | | NULL | |
| gender | char(1) | YES | | NULL | |
| birthday | datetime | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
select * from stuinfo;
#查看表的数据
insert into stuinfo values(1,"Mr zhang","男","1990-01-02");
#插入数据
#PS:如果出现中文名报错的情况,需要设置一下name的编码格式
mysql> insert into stuinfo values(1,"刘三元","男","1980-01-02");
ERROR 1366 (HY000): Incorrect string value: '\xC1\xF5\xC8\xFD\xD4\xAA' for column 'stuname' at row 1
set names gbk;
#更改表的信息
update stuinfo set birthday="1990-01-04" where stuname="刘三元";
#删除表的信息
delete from stuinfo where stuname = "刘三元";
#修改表的结构
alter table stuinfo add column email varchar(20);
#删除表
drop table stuinfo
#退出
exit
```
sql不区分大小写
```sql
注释
#
--(空格)
/* */多行注释
```
### 2.1 基础查询
```mysql
#进阶一:基础查询
/*
语法select 查询列表 from 表名
特点:
1.查询的结果集,是一个虚拟表
2.select查询表 类似于system.out.printin(打印内容)
select后面跟的查询列表,可以由多个部分组成,中间用逗号隔开
例如:select字段1,字段2,表达式 from 表;
system.out.println()的打印内容,只能有一个
3.执行顺序
select first_name from employees;
①from employees
②select first_name
4.查询的列表可以是:字段、表达式、常量、函数等
*/
#一、查询常量
SELECT 100;
#二、查询表达式
SELECT 100%3;
#三、查询单个字段
SELECT last_name FROM employees;
#四、查询多个字段
SELECT `first_name`, `last_name`, `email` FROM employees;
#五、查询所有字段
SELECT * FROM employees;
#F12可以快捷对齐
SELECT
`first_name`,
`last_name`,
`email`,
`phone_number`,
`job_id`
FROM
employees ;
#六、查询函数(调用函数,获得返回值)
SELECT DATABASE();
#查询当前的数据库
SELECT VERSION();
#查看当前数据库版本
SELECT USER();
#查看当前的用户
#七、起别名
#方式一:使用as关键字
SELECT USER() AS 用户名;
SELECT USER() AS '用户名';
SELECT USER() AS "用户名";
SELECT last_name FROM employees;
SELECT last_name AS 姓名 FROM employees;
SELECT last_name AS '姓名' FROM employees;
#方式二:使用空格
SELECT last_name 姓名 FROM employees;
SELECT last_name '姓名' FROM employees;
#八、
#需求:查询first_name和last_name拼接成的全名,最终起名为姓名
#方案一 +
SELECT first_name+last_name AS 姓名 FROM employees;
#
# 加号+
# 1.加法运算
# ①两个操作数都是数值型
# 100 + 10.1
# ②其中一个是操作数
# ”张无极“ + 10
# 将字符串转换为数值类型,如果无法转换就直接变为0
# ③其中一个操作数是null
# null + 100 -> null
# null + null -> null
#
#方案二 concat
SELECT CONCAT(first_name," ",last_name) AS 姓名 FROM employees;
#九、distinct的使用
#查询员工涉及到的部分编号有那些
SELECT DISTINCT department_id FROM employees;
#十、查看表的结构
DESC employees;
SHOW COLUMNS FROM employees;
#ifnull(表达式1,表达式2)
#表达式1为可能为null的值,表达式2为当表达式1为null最终的显示值
#
SELECT
CONCAT(
`employee_id`,
',',
`first_name`,
',',
`last_name`,
',',
`email`,
',',
IFNULL(`commission_pct`, 'null')
) AS put
FROM
employees ;
SELECT `commission_pct`,IFNULL(`commission_pct`,"空") FROM employees;
```
### 2.2 条件查询
```mysql
#进阶二:条件查询
/*
语法:
select 查询列表
from 表
where 筛选条件;
执行顺序
① from子句
② where 子句
③ select 子句
select last_name,first_name from employees where salary > 2000;
特点:
1、按关系表达式筛选
关系运算符 > < >= <= = != <>
不建议使用!=
2、按逻辑运算筛选
逻辑运算符
AND OR NOT
&& || !
3、模糊查询
like
between and
is null
*/
SELECT last_name,first_name FROM employees WHERE salary > 2000;
#一、按关系表达式筛选
#案例1、查询部门编号不是100的员工信息
SELECT
*
FROM
employees
WHERE department_id != 100 ;
#案例二、查询工资小于15000的姓名和工资
SELECT
CONCAT(last_name, " ", first_name) AS "姓名",
salary
FROM
employees
WHERE salary < 15000 ;
#二、按逻辑表达式查询
#案例1:查询部门编号不是50 -100 之间的员工姓名、部门编号、邮箱
#方式1
SELECT
CONCAT(last_name, " ", first_name) AS "姓名",
department_id,
email
FROM
employees
WHERE department_id < 50
OR department_id > 100 ;
#方式2
SELECT
CONCAT(last_name, " ", first_name) AS "姓名",
department_id,
email
FROM
employees
WHERE !(department_id > 50
AND department_id < 100) ;
#案例2、查询奖金率 > 0.03或者 员工编号在60-100之间的员工信息
SELECT
*
FROM
employees
WHERE (
commission_pct > 0.03
AND employee_id > 110
) ;
```
### 2.3 模糊查询
```mysql
#三、模糊查询
/*
一般和通配符搭配使用,对字符数据进行部分匹配查询
常见的通配字符
_ 任意单个字符
% 任意多个字符
也可以使用not like
*/
#案例一、 查询姓名中包含字符a的员工信息
SELECT
*
FROM
employees
WHERE last_name LIKE '%a%' ;
#案例二、姓名中最后一个字符为e的员工信息
SELECT
*
FROM
employees
WHERE last_name LIKE '%e' ;
#案例三、姓名第一个字符为m的员工信息
SELECT
*
FROM
employees
WHERE last_name LIKE 'm%' ;
#案例四、姓名中包含三个字母为x的员工信息
SELECT
*
FROM
employees
WHERE last_name LIKE '__x%' ;
#案例四、姓名第二字符为_的员工信息
SELECT
*
FROM
employees
WHERE last_name LIKE '_\_%' ;
#或者
SELECT
*
FROM
employees
WHERE last_name LIKE '_&_%' ESCAPE '&';
#2、in
/*
功能:查询某字段的值是否属于指定的列表范围内
in(常量值1,常量值2,常量值3,...)
或者 not in(常量值1,常量值2,常量值3,...)
*/
#案例1:查询部门编号是30,50,90的员工信息
SELECT
last_name,
department_id
FROM
employees
WHERE department_id IN (30, 50, 90) ;
# not in
SELECT
last_name,
department_id
FROM
employees
WHERE department_id NOT IN (30, 50, 90) ;
#只是简洁性不一样
SELECT
last_name,
department_id
FROM
employees
WHERE department_id = 30
OR department_id = 50
OR department_id = 90;
#案例二、查询工种编号不是SH_CLERK或者IT_PROG的员工信息
SELECT
*
FROM
employees
WHERE job_id IN ("SH_CLERK", "IT_PROG") ;
#3、between and
/*
功能:判断某个字段的值是否介于什么之间
between and / not between and
*/
#案例1、查询部门编号是30-90之间的部门编号
SELECT
department_id,
last_name
FROM
employees
WHERE department_id BETWEEN 30
AND 90 ;
#30和90不可以颠倒
#案例2、查询年薪不是100000-200000之间的员工、工�