MYSQL基础入门一
1.专业词汇
- DB (database):数据库,像仓库一样,保存一系列分门别类数据
- DBMS(database management system):数据库管理系统,用于创建,操作,使用DB。 常见的有Mysql,SQL sever,Oracle等
- SQL(structure query language):结构化查询语言,在DBMS中通用,但是不同的DBMS也有一些自己独有的语句
2.Mysql基础操作
2.1 基础语句
登录数据库: 使用系统命令符操作,之前需要将mysql安装文件路径加入系统环境变量中,具体操作网上有教程
mysql -h localhost -P 3306 -u root -p #按提示输入密码,然后成功登录数据库
show databases; #查看有几个数据库,语句一般以;或者\g结尾
use test; #进入到test数据库中
show tables from mysql; #查看mysql这个库中有哪些表,注意这时候系统还停留在test数据库中
select database(); #查看自己在哪个库中
创建一张表
mysql> create table study(
-> id int,
-> name varchar(20));
#之前停留在test数据库中,所以这就是在test数据库中创建了一张叫study的表,其中有两列数据,id的属性是int, name的属性是字符串(varchar)
show tales; #这样可以看到刚刚创建的study表
desc study; #展示study这张表的结构
2.2 SQL语法规范
- 不区分大小写,但建议关键字大写,表名、列名小写
- 每条命令用;或者\g结尾
- 一条命令如果很长,可以缩减或者换行
- 注释:#指数内容 或者-- 注释内容
- 多行注释:/* 注释内容 */
- Ctrl+Shift+C 注释 SQL 窗口选择内容, Ctrl+Shift+R 从选择内容删除注释
3.DQL(查询语言)
SQL语言可以分为四大类,第一种叫做Database query language ,包含各种查询语言
3.1基础查询
/*
语法:
select 查询列表 from 表名;
*/
USE myemployees; #打开指定的库
#查询表中的单个字段
SELECT last_name FROM employees;
#查询表中的多个字段
SELECT last_name,salary,email FROM employees;
#查询表中的所有字段, 双击表名可代替手动输入
SELECT * FROM `employees`; #``着重号也可以不加, 主要起到识别库名的作用, 防止sql指令和库名恰好重叠时的失效
#查询常量值
SELECT 100;
SELECT 'john';
#查询表达式
SELECT 100%50;#取模
#查询函数
SELECT VERSION();
起别名: select 什么, 显示出来的数据的名称就是什么, 但是我们可以给他起别名
如果查询的字段有重复,我们也可以取别名给区分开来
SELECT last_name AS 名字,salary,email FROM employees;
#这样显示出来表格第一行就是名字,而不是last_name
SELECT last_name 名字,salary,email FROM employees;
# AS甚至都可以省,直接加个空格
去除重复值: 比如查询100个员工属于哪些部门, 这样会得到100条数据,但是我只需要每个部门出现一次就好
select distinct department_id from employees
CONCAT()函数: 把员工姓和名连成一起, 并且显示为姓名 CONCAT()函数
注意: 如果有一行数据为null,那么拼接出来都是null
SELECT CONCAT (salary,email)AS 薪水邮箱 FROM employees;
SELECT
IFNULL (`commission_pct`,0) AS 奖金率,
`commission_pct` #在旁边显示原本记录来对比下
FROM
employees ;
#假定有些人的ommission_pct是null, 那么可以通过ifnull函数来判断, 如果是null就显示0,如果不是就不管
显示表的结构
DESC departments; #DESC是describe的缩写
3.2条件查询
/*
条件查询语法:
select
查询列表
from
表名
where
筛选条件;
筛选分类:
1.按条件表达式筛选,(> < = != >= <=)这些表达式
2.按逻辑表达式筛选,逻辑运算符:and(&&),or(||),not(!)
3.模糊查询:like,between and,in, is null
*/
#1.按条件表达式筛选:查询工资大于12000的员工信息
SELECT
`employee_id`,
`first_name`,
`salary`
FROM
`employees`
WHERE `salary` > 12000;
#2.按逻辑表达式筛选(其实就是用来链接条件表达式):查询工资在10000到20000之间的员工名,工资,奖金
SELECT
`first_name`,
`salary`,
`commission_pct`
FROM
`employees`
WHERE `salary` >= 10000
AND `salary` <= 20000 ; #之后其实用between and 语句更加简洁
#3.模糊查询
#3.1 like:查询员工名中包含字符a的员工信息
SELECT
*
FROM
`employees`
WHERE `first_name` LIKE '%a%' ;
#通配符:%代表任意字符(包括0字符), _表示任意单个字符
#3.2转义\:查询员工名字第二个字符是下划线
SELECT
`last_name`
FROM
`employees`
WHERE
`last_name` LIKE '_\_%' #注意此处\的用法,加了转义符后,下划线不再是任意字符的意思了
#自定义转义符的方法: `last_name` LIKE '_¥_%' ESCAPE '¥'
#3.3 between and: 查询员工编号在100到120之间的员工信息(和python不同,这里100和120都包含)
SELECT
*
FROM
`employees`
WHERE `employee_id` BETWEEN 100 #也可以写 NOT BETWEEN ,就是不在这个区间的
AND 120
#3.4 in: 查询员工类别是IT_PROG,AD_VP,AD_PRES 中的员工信息
SELECT
*
FROM
`employees`
WHERE `job_id` IN ('IT_PROG','AD_VP','AD_PRES');
#3.5 is null:查询没有奖金的员工名和奖金率
SELECT
`first_name`,`commission_pct`
FROM
`employees`
WHERE `commission_pct` IS NULL; #如果这里写is not null , 那么就是筛选出有奖金的员工
3.3排序查询
/*
条件查询语法:
select
查询列表
from
表名
where
筛选条件;
order by 排序列表 asc|desc(升序降序)
*/
#DESCEND降序:查询员工信息,工资从高到底排序
SELECT
*
FROM
`employees`
ORDER BY salary DESC ;
#ASCEND升序
SELECT
*
FROM
`employees`
ORDER BY salary ASC ;#如果不写默认是升序
#按表达式的结果排序:按年薪的高低显示员工的信息
SELECT
`first_name`,
(`salary` * 12) AS 年薪 #起别名
FROM
`employees`
ORDER BY 年薪 DESC ;
#用函数的输出值排序:例如按姓名长度排序
SELECT
`first_name`
FROM
`employees`
ORDER BY length(first_name) DESC ;
#多字段排序:例如按工资升序,工资相同的再按员工编号降序
SELECT *
FROM `employees`
ORDER BY `salary` ASC, `employee_id` DESC;
4.常见函数
4.1字符函数
LENGTH函数
SELECT LENGTH('张三丰')#用于获取字节个数,UTF-8中一个汉字3个字节,GBK中只占2个字节
CONCAT函数
SELECT CONCAT(`first_name`,'_',`last_name`) #把2个值用下划线拼接起来
UPPER LOWER函数
SELECT UPPER('ran') #大小写转换
SELECT LOWER('ran')
#把姓变成大写,名变小写,然后拼接
SELECT
CONCAT(
UPPER(`last_name`),
LOWER(`first_name`)
) 名字
FROM
`employees`
SUBSTR又叫SUBSTRING函数
SELECT SUBSTR('李莫愁爱上了陆展源',7) #取从第7到最后一个字符, SQL中从1开始
SELECT SUBSTR('李莫愁爱上了陆展源',1,3)#取第1到3个字符
INSTR函数
SELECT INSTR('李莫愁陆展源爱上了陆展源','陆展源')
#返回第二串字符在第一串中的开始字节数,如果没有就返回0
TRIM函数
SELECT TRIM(' 李莫愁 ');
#去掉前后空格
SELECT TRIM('a' FROM 'aaaa李莫愁aaaaaa');
#去掉前后的a
LPAD,RPAD函数
SELECT LPAD('李莫愁',10,'a');
#从左边填充a,充满李莫愁10个字符
SELECT LPAD('李莫愁',10,'a');
#从右边填充a,充满李莫愁10个字符
REPLACE函数
SELECT REPLACE('李莫愁1234565','123','321');
#把第一个字符串中的123替换为321 (所有出现的都会被替换)
4.2数学函数
ROUND四舍五入
SELECT ROUND(4.555)
#返回5
SELECT ROUND(4.555,2) #表示小数点后保留2位,返回4.56
CEIL函数向上取整
SELECT CEIL(4.555)
#返回大于这个数的最小整数
FLOOR向下取整
SELECT FLOOR(4.555)
#返回小于等于该参数的最大整数
TRUNCATE截断函数
SELECT TRUNCATE(4.555,3)
# 小数点后保留3位
MOD取余
SELECT MOD(99.1,3)
#返回99.1除3的余数
SELECT 99.1%3 #和MOD作用相同
4.3日期函数
NOW返回日期函数
SELECT NOW()
#返回系统日期
CURDATE,CURTIME
SELECT CURDATE();
#只返回日期不返回时间
SELECT CURTIME();
#只返回时间不返回日期
YEAR,MONTH,DATE,HOUR,MINUTE,SECOND
SELECT YEAR('1999-1-1');
#返回1999,以此内推
SELECT MONTHNAME('1999-1-1');
#返回January
**STR_TO_DATE,DATE_FORMAT **
SELECT STR_TO_DATE('2003-04-01','%Y-%m-%d');
#字符转日期,DATE_FORMAT是日期格式转字符。
#大小写和格式需要留意,不然容易报错:
Y:四位年份
y:两位年份
m:两位数月份
c:不补0的月份
d:两位数日期
H:24小时制
h:12小时制
i:两位数分钟
s:两位数秒
4.4其他函数
SELECT VERSION(); #显示当前MYSQL版本
SELECT DATABASE();#显示当前所在数据库
SELECT USER(); #显示:用户名@主机名 (表示XX用户连接XX主机,和email地址类似)
4.5流程控制函数
IF函数:实现if else效果
SELECT IF(10>5,2,3)
#如果10大于5,返回2,否则返回3
CASE函数流程控制
/*使用一:
查询员工的工资,
当部门号为30,显示1.1倍工资
当部门号为40,显示1.2倍工资
当部门号为50,显示1.3倍工资
其他部门显示原工资
*/
SELECT
`first_name`,`department_id`,
CASE`department_id`
WHEN 30 THEN `salary` * 1.1
WHEN 40 THEN `salary` * 1.2
WHEN 50 THEN `salary` * 1.3
ELSE salary
END AS 新工资
FROM`employees` ;
/* 使用二:
查询工资情况
如果工资>20000,显示A
如果工资>15000,显示B
如果工资>10000,显示C
否则显示D
*/
SELECT `first_name`,`salary`,
CASE
WHEN `salary`>20000 THEN 'A'
WHEN `salary`>15000 THEN 'B'
WHEN `salary`>10000 THEN 'C'
ELSE 'D'
END AS 工资级别
FROM `employees`;

浙公网安备 33010602011771号