MySQL学习笔记
文章目录
数据库的相关概念
DB: 数据库(database),存储数据的“仓库”,它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System),数据库是通过DBMS创建和操作的容器。
SQL:结构化查询语言(Structure Query Language), 专门用来与数据库通信的语言。
数据库存储数据的特点
- 将数据放在表中,表再放到库中。
- 一个数据库中可以有多个表,每个表都有一个名字用来标识自己。表名具有唯一性。
- 表具有一些特性,这些特性定义了数据在表中如何存储,类似Java中“类”的设计。
- 表由列组成,我们也称之为字段。所有的表都是由一个或多个列组成的,每一列类似Java中的“属性”。
- 表中的数据是按行存储的,每一行类似Java中的“对象”。
MySQL的安装
MySQL服务的启动和停止
方式一: 计算机————右键管理————服务
方式二: cmd窗口
net start 服务名
启动服务
net stop 服务名
停止服务
MySQL的登录和退出
方式一: 通过MySQL自带的客户端(仅限于root用户)
方式二: 通过cmd窗口
mysql -h 主机名 -P 端口号 -u 用户名 -p
Enter password:密码
退出: exit或ctrl+c
MySQL常见命令
1.查看当前所有数据库
show database;
2.打开指定的库
use 库名;
3.查看当前库所有表
show tables;
4.查看其他库所有表
show tables from;
5.创建表
create table 表名(
列名 列类型,
列名 列类型,
...
);
6.查看表结构
desc 表名;
7.查看服务器版本
方式一:登录到MySQL服务端
select version();
方式二: 没有登录到MySQL服务端(cmd窗口)
mysql --version
或
mysql --V
MySQL语法规范
- 不区分大小写,但建议关键字大写,表名、列名小写。
- 每条命令最好用分号结尾
- 每条命令根据需要,可以进行缩进或换行
- 注释
单行注释 : #注释文字
单行注释 : -- 注释文字
多行注释 : /* 注释文字 */
DQL语言
基础查询
语法:
select 查询列表 from 表名;
1.查询列表可以是: 表中的字段、常量值、 表达式 、函数。
2.查询的结果是一个虚拟的表格。
USE emp;
-
查询表中单个字段
SELECT employeename FROM emp;
-
查询表中的多个字段
SELECT employeename,userId,userPw FROM emp;
-
查询表中的所有字段
SELECT * FROM emp;
-
查询常量值
SELECT 100;
SELECT `A`;
-
查询表达式
SELECT 100%98;
-
查询函数
SELECT version();
-
起别名
(1). 便于理解。
(2). 如果查询的字段有重名的情况,使用别名可以区分开来。
方式一:
SELECT 100%98 AS 结果;
SELECT employeename AS "姓名" from employee;
方式二:
SELECT employeename "姓名" FROM employee;
-
去重
查询员工表中涉及到的所有部门的编号
SELECT DISTINCT departmentID FROM employee;
-
+号的作用
MySQL中的+号仅仅只有一个功能————运算符
/*两个操作数都为数值型,则做加法运算*/
SELECT 100+90;
/*
只要其中一方为字符型,试图将字符型数值转换成数值型
如果转换成功,则继续做加法运算
如果转换失败,则字符型数值转换成0
*/
SELECT `123`+90;
/*只要其中一方为NULL,则结果肯定是NULL*/
SELECT NULL+10;
-
连接
CONCAT(str,str2,...)
函数 -
IFNULL函数
SELECT IFNULL(expr1,expr2);
SELECT IFNULL(employeename,查无此人) AS 是否有人 FROM employee;
条件查询
语法:
SELECT
查询列表
FROM
表名
WHERE
筛选条件;
分类:
- 按条件表达式筛选
条件运算符: > < + != <> >= <= - 按逻辑表达式筛选
逻辑运算符:$$ AND , || OR , ! NOT - 模糊查询
like , between and , in , is null/is not null
按条件表达式筛选
/*查询工资大于12000的员工信息*/
SELECT
*
FROM
employees
WHERE
salary>12000;
按逻辑表达式筛选
/*查询工资在10000-20000之间的员工名、工资以及奖金*/
SELECT
last_name,
salary,
commission_pct
FROM
employees
WHERE
salary>=10000
AND
salary<=20000;
/*查询部门编号不是在90-110之间,或者工资高于15000的员工信息*/
SELECT
*
FROM
employees
WHERE
NOT(department_id>=90 AND department_id<=100) OR salary>15000;
模糊查询
1.like
特点:
一般和任意通配符搭配使用
通配符:
% : 任意多个字符,包含0个字符
_ : 任意单个字符
/*查询员工中包含字符a的员工信息*/
SELECT
*
FROM
employees
WHERE
last_name
LIKE
`%a%`;
/*查询员工名中第三个字符为e,第五个字符为a的员工名和工资*/
SELECT
*
FROM
employees
WHERE
last_name LIKE `__e_a%`;
/*查询员工名中的第二个字符为_的员工名*/
SELECT
last_name
FROM
employees
WHERE
last_name LIKE `_\_%`
- between and
使用between and可以提高语句简洁度
包含临界值
两个临界值不能调换顺序
/*查询员工编号在100-120之间的员工信息*/
SELECT
*
FROM
employees
WHERE
employee_id BETWEEN 100 AND 120;
- in
使用in提高语句简洁度
in列表的值类型必须一致或者兼容
/*查询员工的工种编号是 IT_PEOG、AD_VP、 AD_PRES中的一个员工名和工种编号*/
SELECT
last_name,
job_id
FROM
empolyees
WHERE
job_id IN(`IT_PEOG`,AD_VP`, `AD_PRES`);
- is null
<>或=不能用于判断NULL值
IS NULL 或 IS NOT NULL可以判断NULL值
/*查询没有奖金的员工名和奖金率*/
SELECT
last__name,
commission_pct
FROM
employees
WHERE
commission_pct IS MULL;
- <=> 安全等于
既可以判断NULL值,又可以判断普通的数值。
缺点是可读性较差
排序查询
SELECT
查询列表
FROM
表
WHERE
筛选条件
ORDER BY 排序列表 asc|desc // 升序or降序
order by 字句可以支持单个字段、多个字段、表达式、函数、别名。
常见函数
概念: 类似于java中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。
好处: 隐藏了实现细节、提高代码的重用性。
调用: select 函数名(实参列表) 【from 表】
字符函数
length 获取参数值的字节个数
SELECT LENGTH(`John`);
concat 拼接字符串
SELECT CONCAT(last_name, `_`, first_name) FROM employees;
upper/lower
SELECT UPPER(`John`);
SELECT LOWER(`John`);
substr/substring
如果是单独参数,索引从1开始(字符长度)
截取从指定索引处后面所有字符
SELECT SUBSTR(`asdfghjk` , 5) out_put; //ghjk
截取从指定索引处指定字符长度的字符
SELECT SUBSTR(`asdfghjk` , 5,6) out_put; //gh
instr 返回子串第一次出现的索引, 如果找不到,返回0。
trim
SELECT TRIM(` Myjinji `); //去掉前后的空格
SELECT TRIM(`a` FROM `aaaaaaMyjinjiaaaa`);//去掉Myjinji前后的a.
lpad/rpad: 用指定的字符实现左/右填充指定长度
SELECT LPAD(`这里是一个字符串`,长度,`这里是要填充的字符`);
replace 替换
SELECT REPLACE(`今天天气很糟糕` , `糟糕` , `不错`);
//输出:今天天气很不错
数学函数
round() 四舍五入
SELECT ROUND(1.56);
//2SELECT ROUND(1.567,2);
//1.57
ceil(): 向上取整,返回>=该参数的最小整数
floor(): 向下取整,返回<=该参数的最大整数
truncate(): 截断
SELECT TRUNCATE(1.69999,1);//输出:1.6
取余(被除数,除数) :
SELECT(10,3);//输出:1
和 % 效果一样
日期函数
now():返回当前系统日期+时间
curdate():返回当前系统日期,不包含时间
curtime():返回当前系统时间,不包含日期
DATEDIFF(被减数时间,减数时间):算出时间差(天)
可以获取指定的部分,年、月、日、小时、分钟、秒。
SELECT YEAR(NOW()); //2020;
SELECT YEAR(`1988-1-1`);
SELECT MONTHNAME(NOW()); //April;
str_to_date:讲字符通过指定的格式转换成日期
SELECT STR_TO_DATE(`1988-3-2`,`%Y-%c-%d`) AS 时间;
序号 | 格式符 | 功能 |
---|---|---|
1 | %Y | 四位的年份 |
2 | %y | 两位的年份 |
3 | %m | 月份(01,02…,11,12) |
4 | %c | 月份(1,2…11,12) |
5 | %d | 日(01,02…) |
6 | %H | 小时(24小时制) |
7 | %h | 小时(12小时制) |
8 | %i | 分钟(00,01…59) |
9 | %s | 秒(00,01…) |
date_format:将日期转换成字符
流程控制函数
if函数:if else的效果
SELECT IF(10 > 5,`大`,`小`); //大
case函数
case的使用一:
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句2;
when 常量2 then 要显示的值2或语句2;
···
else 要显示的值n或语句n;
/*end as 一个名称
from 表*/
如果配合SELECT来用,值或语句后面不加分号。
case 的使用二(类 似于 多重if):
case
when 条件1 then 要显示的值1或语句2;
when 条件2 then 要显示的值2或语句2;
···
else 要显示的值n或语句n;
/*end as 一个名称*/
分组函数
用作统计使用,又称为聚合函数或统计函数或组函数。
- 分类:sum , avg , max , min , count 计算个数