基本配置
一、MySql的启动
- 方式一:
输入services.msc打开服务找到mysql服务进行开关 - 方式二:
在cmd中输入net start mysql以打开MySQL服务
二、登陆
通过在cmd中输入
mysql 【-h主机名 -P端口号 】-u用户名 -p密码
注意:
- -p和密码之间没有空格
- 可以通过ctrl+c或者exit推出
三、MySQL常见命令
- 查看当前所有数据库
show databases; - 打开制定的库
use 库名; - 查看当前库的所有表
show tables; - 查看其它库的所有表
show tables from 库名;- 可以在处于一个库中的时候查看另一个库的表
- 查看当前库的名称
select database()
- 创建表
create table 表名( 列名 列类型, 列名 列类型, 。。。 ); - 查看表结构
desc 表明;
四、查看服务器版本
- 在MySQL服务端
select version() - cmd
mysql --version
mysql -v
五、语法规范
- 不区分大小写,但建议关键字大写,表明、列名小写
- 每条命令分号结尾
- 每行命令可以根据需要换行(不写分号就行)
- 注释
1. 单行注释(两种): #注释内容 -- 注释内容 2. 多行注释: /*注释文字*/
SQL语法
一、基本查询
- 语法
select 查询列表 from 表名;- 查询列表可以是:表中字段、常量值、表达式、函数
- 查询的结果是一个虚拟的表格
- 查询表中的单个字段
SElECT last_name FROM employees; - 查询表中的多个字段
SELECT last_name,salary FROM employees; - 查询表中所有字段
SELECT * FROM employees - 查询常量值
SELECT 100;
SELECT 'john'
- 查询表达式
SELECT 100%98 - 查询函数
//版本
SELECT VERSION();
-
起别名
- 方式一:用AS
SELECT 100%8 AS 结果; - 方式二:用空格
SELECT 100%98 结果
- 好处:
- 便于理解
- 如果查询的字段有重名的情况下,可以使用别名区分开来
- 注意:如果别名中有空格或特殊符号,要用引号引起来
- 方式一:用AS
-
去重:DISTINCT关键字
案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees
- MySQL中+号的作用
- 功能:运算符
#1.两个都为数值型,做加法运算
SELECT 100+90;
#2.只要其中一方为字符型,就会把字符转换为数值,若转换不成功则字符相当于 等于零
SELECT '123'+90;
SELECT 'john'+90
#3.只要一方为null,则结果肯定为null
SELECT null+10;
- 一队单引号可以用于区分关键字与要查询的东西
SELECT 'NAME' FROM user
//这里如果没有单引号,NAME就会被认为是关键字
- 用CONCAT拼接字符串
#1.SELECT CONCAT('a','b','c') AS 结果
result:abc
#2.SELECT CINCAT(last_name,first_name) AS 结果 FROM employees;
二、条件查询
- 语法
SELECT 查询列表 FROM 表名 WHERE 筛选条件;
- 分类
- 按条件表达式筛选:
> < = != <= - 按逻辑表达式筛选:
&& || ! - 模糊查询
like
between and
in
is null
- 按条件表达式筛选:
- 按条件筛选
#案例1:查询工资>12000的员工信息
SELECT * FROM employyes
WHERE salary>12000
#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT last_name,department_id
FROM employees
WHERE department_id<>90;
- 按逻辑表达式筛选
#案例1:查询工资在10000到20000之间十五员工名、工资、奖金
SELECT last_name,salary,commission_pct
FROM employees
WHERE salary>=10000 AND salary<=20000
#案例2:查询部门编号不是在90到110直接按,或者工资高于15000的员工信息
SELECT * FROM employees
WHERE NOT(department_id>=90 AND department_id<=11) OR salary>15000;
- 模糊查询
- like
- 和通配符搭配使用
- %:任意多个字符,包含零个
- _:表示任意一个字符
- ESCAPE函数:用来标识任意一个字符为转义字符,也可以直接用\来转义
- 和通配符搭配使用
#案例1:查询员工名中包含字符a的员工信息 SELECT * FROM employees WHERE last_name LIKE '%a%'; #案例2:查询员工中第三个字符为e,第五个字符为a的员工名和工资 SELECT last_name,aslary FROM employees WHERE last_name LIKE '___e_a'; #案例3:查询员工名中第二个字符为_的员工名 SELECT last_name FROM employees WHERE last_name LIKE '_$_%' ESCAPE '$'- between and
- 包含临界值
- 两个临界值不要调换顺序
- 简化代码
#案例1:查询工资在10000到20000之间十五员工名、工资、奖金 SELECT last_name,salary,commission_pct FROM employees WHERE salary BETWEEN 10000 AND 20000- in
- 含义:判断某字段的值是否属于in列表中的某一项
- in列表中值的类型必须一致
#案例1:查询员工的工种编号是IT、AD、AP SELECT last_name,job_id from employees where job_id="IT" OR job_id="AD" OR job_id="AP"; #--------------------------------------------------------- SELECT last_name,job_id from employees where job_id in('IT','AD','AP');- is null
- =或<>不能判断null值
- 可以用函数isnull()来判断改值是否为null,并且可以把null设置为指定的值
//查找Money,如果为nnull,则显示为0 SELECT isnull(money,o)
SELECT last_name,commission_pct FROM employees WHERE commission_pct IS NULL; - like
- 安全等于<=>
- <=>既可以判断null值,又可以判断普通的数值
#案例1
SELECT last_name,commission_pct
FROM employees
WHERE commission_pct <=> NULL;
#案例2:查询工资为12000的员工信息
SELECT * FROM employees
WHERE salary <=> 12000;
三、排序查询
- 基础
- 语法
- 如果不写asc|desc默认按照升序排列
- ORDER BY子句支持单个字段,多个字段,表达式,函数,别名
- ORDER BY子句一般是放在查询语句的最后面,limit子句除外
SELECT 查询列表 from 列表 [WHERE 筛选条件] order by 排序列表 [asc|desc] - 案例
#案例1:查询员工信息,要求工资从高到低排序 SELECT * FROM employees ORDER BY salary DESC; #案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序 SELECT * FROM employees WHERE department_id >= 90 ORDER BY hiredate ASC; #案例3:按年薪的高低显示员工的信息【按表达式排序】 SELECT *,salary*12(1+IFNULL(commission_pct,0)) 年薪 FROM employees ORDER BY salary*12(1+IFNULL(commission_pct,0)) DESC; #案例4:按年薪的高低显示员工的信息【按别名排序】 SELECT *,salary*12(1+IFNULL(commission_pct,0)) 年薪 FROM employees ORDER BY 年薪 DESC; #案例5:按姓名长度显示员工的姓名和工资【按函数排序】 SELECT * LENGTH(last_name) 字节长度,last_name,salary FROM employees ORDER BY LENGTH(last_name) DESC; #案例6:查询员工信息,要求先按工资排序,再按员工编号排序【按多字段排序】 SELECT * FROM employees ORDER BY salary ASC,employee_id DESC;
- 语法
- 现阶段各个子句执行顺序
- from
- where
- select
- order by
四、常见函数
- 概念
- 调用
SELECT 函数名(实参列表) [from 表] - 分类
- 单行函数
concat,length,ifnull - 分组函数(聚合函数,组函数)
做统计使用,把一组数输出一个值
- 单行函数
- 调用
- 单行函数
- 字符函数
- length:获取字符值的字节个数
SELECT LENGTH('john') - concat:拼接字符串
SELECT concat(last_name,'_',first_name) FROM employees - upeer、lower
SELECT UPEER('john') - substr、substring:截取字符串
- 索引从1开始
//截取从指定索引出后面所有字符 SELECT SUBSTR('李莫愁 爱上了李云龙',6) ot_put; //截取从指定索引处指定字符长度的字符 SELECT SUBSTR('李莫愁爱上了李云龙',1,3) out_put;- instr:返回子串第一次出现的索引,如果找不到返回0
SELECT INSTR('杨不悔爱上了杨过','杨过') AS out_put- trim
#去除字符前后的空格 SELECT TRIM(' 二营长 ') AS out_put; #去除指定的字符 SELECT TRIM('a' FROM 'aaaaaa我aaa')- lpad
#用指定的字符实现左指定填充长度 SELECT LPAD('殷素素',10,'*') AS outt_put //当字符长度为2时会输出:殷素 SELECT LPAD('殷素素',2,'*') AS outt_put- rpad:同上,右填充
- replace:替换
#用李云龙替换二营长 SELECT REPLACE('李云龙李云龙李云龙二营长二营长','二营长','李云龙') AS out_put - length:获取字符值的字节个数
- 数学函数
- round:四舍五入
#结果:-2 SELECT ROUND(-1.55) #保留两位小数 SELECT ROUND(1.567,2)- ceil:向上取整
- floor:向下取整
- truncate 截断:小数点后保留几位
5.mod:取余//结果:1.6 SELECT TRUNCATE(1.69999,1); - 日期函数
- now:返回当前系统日期+时间
- curdate: 返回当前日期不包含时间
- curtiome:返回当前时间不包含日期
- 可以获取指定的年月日小时秒等
SELECT YEAR(NOW()) 年 SELECT YEAR(hiredate) 年 FROM employees- str_to_date:将字符通过指定的格式转换成日期
#查询入职日期为1992-4-3的员工 SELECT * FROM employees WHERE hiredate = '1992-4-3' ------------- SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %y')- date_format:将日期转换成字符
查询有奖金的员工的入职日期(xx月/xx日 xx年) SELECT last_name,DATE_FORMAT(hiredat,'%m月%d日 %y年') 入职日期 FROM employees WHERE commission_pct IS NOT null; - 流程控制函数
- if函数:if else 效果
SELECT IF(10<5,'大','小'); SELECT IF(commission_pct IS NULL,'啊','嗷') FROM employees- switch
#第一种 SELECT salary,department_id, CASE depaerment_id WHEN 30 THEN salary*1.1 WHEN 40 THEN salary*1.2 WHEN 50 THEN salary*1.3 END AS 新工资 FROM employees; #第二种 SELECT salary, CASE depaerment_id WHEN salary>20000 THEN 'A' WHEN salary>15000 THEN 'B' ELSE 'D' END AS 工资级别 FROM employees;
- 字符函数