##关于一些快捷键
- win+R打开cmd
- win+shift+S局部截屏
- mspaint打开画板
- F12对sqlyog自动格式化
- F9执行
- 代码错误是因为中英文错误,作者在写的时候为了效率并没有仔细管这个,关于格式问题,有时间再改(把markdownpad当写字板来用了,并不知道技巧)
##MySQL启动和退出
net start mysql55
##MySQL服务的登录与退出
- Mysql自带客户端
- cmd(管理)
mysql【-h主机名(root)-P端口号(3306)】-u用户名-p密码(123456) (不知道为什么我的电脑用不来)
原因:环境变量没配好 - 退出 ctrl+C 或者 exit
##MySQL的常见命令
-
查看当前所有数据库
show databases; -
打开指定的库;
use 库名 -
查看当前库的所有表
show tables from 库名; -
查看当前库所有表
show tables -
创建表
create table 表名(
列名 列类型,
列名 列类型,
。。。
); -
查看表结构
desc表名; -
查看服务器的版本
1.登录到mysql服务器
select version();
2.没有登录到mysql服务器
mysql–version 或 mysql–V
##语法规范
- 单行注释:#注释文字
- 单行注释:-- (空格)注释文字
- 多行注释:/注释文字/
- 快捷键运行:F9
- 修改字体大小:ctrl+鼠标滚动轴
##DQL(data query language数据查询)语言学习
- 基础查询
/*
语法:
select 查询列表 from 表名;
类似于:system.out.printn(打印东西);(Java中的内容)
特点:
- 查询列表可以是:表中的字段、常量值、表达式、函数
- 查询的结果是一个虚拟的表格
###1.查询单个
SELECT last_name FROM employees;
###2.查询多个
SELECT last_name,salary,email FROM employees;
###3.查询表中所有字段
方式一:可以双击
方式二:select*(代表所有字段)from employees;
###4.查询常量值
SELECT 100; select 'John';
###5.查询表达式
select 100*98; select 100%98;(答案:2)
###6.查询函数
select version();
###7.别名(提高可读性;如果查询的字段有重名的情况,起别名可以区分开来)
方式一:select 100%98 AS 结果;
select first_name as 名 from employees;
方式二:使用空格
select last_name 姓,first_name 名 from employees;
####特殊情况
查询salary,显示结果为 out put
(加单引号或者双引号)(mysql里面建议加双引号)
select salary as 'out put' from employees;
###8.去重
查询部门编号去重(加上distinct)
select distinct department_id from employees;
###9.+号的作用
案例:查询员工的姓加上名
select last_name + first name as 姓名
from employees;(输不出来)
因为
mysql中的+号:
仅仅只有一个功能:运算符
select 100+90;两个操作数都为数值型,则做加法运算
select ‘123’+90; 只要其中一方为字符型,试图将字符型数值转换为数值型(输出213)
select ‘jonn’+90;如果转换失败,则将字符型数值转换为0
select null+10;只要其中一方为null,则结果肯定为null
故用concat
select concat(‘a’,‘b’,‘a’)as
select concat(‘first_name’,‘last_name’) as 姓名 from employees;
###如果没有奖金率
那么用 ifnull
select ifnull(commission_pct,0)as 奖金率 from employees;
###进阶2:条件查询
/*
语法:
select 查询列表
from 表名
where筛选条件
程序执行时的顺序一、from,二、筛选条件,三、select
###条件查询分类
一、按条件表达式筛选
条件运算符:> < = != <>(也当作不等于) >= <=
二、按逻辑表达式筛选
逻辑运算符:
&&(与) ||(或) !(非)
and or not
三、模糊查询
like
between and
in
is null或者(is not null)
####案例1
查询工资>12000的员工信息
select * from employees where salary>12000;
####案例2
查询部门编号不等于90的员工名和部门编号
select last_name, department_id from employees where department_id !=90; (这里的不等于最好用<>,mysql推荐)
####案例3
查询工资z在10000到20000之间的员工名、工资以及奖金
select last_name,salary,commission_pct from employees where salary>=10000 and salary<=20000;
####案例4
查询部门编号不是在90到110之间,或者工资高于15000的员工信息
方法一:select * from employees where department_id <90 or department_id> 110 or salary>15000;
方法二:select * from employees where Not(department_id>=90 and department_id<=110)or salary>15000;
###模糊查询
####案例1
查询员工名中包含字符a的员工信息
select * From employees where last_name like '%a%';
标注:like
一般和通配符搭配使用
%任意多个字符,包含0字符
_任意单个字符
####案例2
查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select last_name, salary from employees where last_name like '___e_a%';
###案例3(特别的)
查询员工名中第二个字符为_的员工名
select last_name from employees where last_name like '_\_%';
(用下划线转义一下)
mysql里面是这么推荐的
last_name like '_$(随便一个字符)_%' escape '$';(这里注释一下);
###between and(包含临界值)(两个值不能颠倒顺序)
案例4:查询员工编号在100到120之间的员工信息
select * From employees where employee_id between 100 and 120;
###in
案例5:查询员工的工种编号是 IT_DROT、AD_VP、AD_PRES中的一个员工名和工种编号
方法一:
select last_name, job_id from employees where job_id = 'IT_DROT' or job_id = 'AD_VP' or job_id = 'AD_PRES';
方法二:
select last_name,job_id from employees where job_id in ('IT_DROT','AD_VP','AD_PRES');
####in的注意事项
in列表的值类型必须统一或者兼容123,"123"都是整型
###is null
案例6:查询没有奖金的员工名和奖金率
select last_name, commission_pct From employees where commission_pct = null;(等于号不能判断null的值)
故此时is null派上了用场
where commission_pct is null;
案例7:查询有奖金的员工名和奖金率
select last_name, commission_pct from employees where commission_pct is not null;
###安全等于 <=>
案例一:也可以用来做查询没有奖金的员工名和奖金率
select last_name, commission_pct from employees where commission_pct <=>null;
案例二:查询工资为12000的员工信息
select last_name, commission_pct from employees where salary <=>12000;
###PK:is null、<=>
is null:仅仅可以判断null值,可读性较高,建议使用上面的
<=> :既可以判断null值,又可以判断普通的数值,可读性较低
###查询员工号为176的员工的姓名和部门号和年薪
select last_name, department_id, salary*12*(1+ifnull(commission_pct,0)) as 年薪 from employees;
#复习
##一、数据库的好处
1、可以持久化数据到本地
2、结构化查询
##二、数据库的常见概念
1、DB:数据库,存储数据的容器
2、DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
3、SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流的数据库软件通用的语言
##三、数据库存储数据的特点
1、数据存放到表中,然后表再放到库中
2、一个库中可以有多张表,每张表具有唯一的表名用来标识自己
3、表中有一个或多个列,列又称为“字段”,相当于Java中的“属性”
4、表中的每一行数据,相当于Java中的“对象”
##四、常见的数据库管理系统
mysql、oracle、db2、sqlserver
#背景知识
##一、mysql的背景
前身属于瑞典的一家公司,mysql ab
08年被sun公司收购
09年sun被oracle收购
##二、mysql的优点
1、开源、免费、成本低
2、性能高、移植性也好
3、体积小、便于安装
##三、mysql的安装
属于c/s架构的软件,一般来讲安装服务端
企业版
社区版
5.5
5.6
5.7
8.0
##四、mysql服务的启动和停止
方式一:通过命令行
net start服务名 net stop服务名
方式二:计算机–右击–管理–服务
##五、登录:
mysql【-h 主机名-P 端口号】-u 用户名-p密码
(前面的可以加空格,p密码不能空格)
(密码那要输的话,可以空格另起一行没那么别人就看不到你的密码)
##退出:
exit或ctrl+C
#复习2
##一、语法
select 查询列表
from表名
##二、特点
1、查询列表可以使字段、常量、表达式、函数、也可以是多个
2、查询结果是一个虚拟表
##三、示例
1、查询单个字段
select 字段名 from 表名
2、查询多个字段
select 字段名,字段名 from表名
3、查询所有字段
select * from 表名
4、查询常量值
select 常量值(加不加from表名都可以,因为没有啥意义)
注意:字符型和日期型的常量值必须用单引号引起了,数值型不要
5、查询函数
select 函数名(实参列表)
(mysql中的函数必须要有select,必须要有返回值)
6、查询表达式
select 100/1234;
7、起别名(方式一:as;方式二:空格)
8、去重
select distinct 字段名 from 表名;
9、+作用(做加法运算)
select 数值+数值:直接运算
select 字符+数值:先试图将字符转换成数值,如果转换成功则继续运算,否则转换成0,在做运算
select null+值;结果都为null
10、【补充】concat函数
功能:拼接字符
select concat(字符1,字符2,字符3,。。。);
11、【补充】ifnull函数
功能:判断字段或表达式是否为null,如果为null返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees
12、【补充】isnull
select isnull(commission_pct),commission_pct from employees;(判断commission_pct的值是否为null,如果为null值为1,如果不为null,值为0)
#条件查询(一、语法)
selceet 查询列表
from 表名
where 筛选条件
#二、筛选条件的分类
1、简单条件运算符
2、逻辑运算符
&&(and) ||(or) !(not)
3、模糊查询
like 一般搭配通配符使用,用于判断字符型
(也可以用来查询数值的)
例子
select *
from employees
where department_id like ‘1__’;
通配符:%任意多个字符,_任意单个字符
between and
in
is null/is not null
is null PK <=>
is null(不能判断普通类型的数值,可判断null值,可读性更好)
<=>(都可)
#进阶3:排序查询
引入
select*from employees;
语法:
select 查询列表
from 表
【where 筛选条件】
order by 排序列表【asc(升序)|desc(降序)】
特点:一、asc代表的是升序,desc代表的是降序,如果不写,默认升序
二、order by 字句中可以支撑单个字段、多个字段、表达式、函数、别名
三、order by 的执行顺序,字句一般是放在查询语句的最后面,但limit字句除外
(一from;二where;三select;四order by)
##案例1:查询员工信息,要求工资从高到低排序
select * from employees order by salary desc;
从低到高
select * from employees order by salary asc;
(asc也可以省略)
##案例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 字节长度 desc;
##案例6:查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
select * from employees order by salary asc,employee_id desc;
##例子1:查询员工的姓名和部门号和年薪,按年薪降序,按姓名升序
select last_name,department_id,salary*12*(1+ifnull(commission_pct,0)) 年薪 from employees order by 年薪 desc, last_name asc;
##例子2:选择工资不在8000到17000的员工的姓名和工资,按工资降序
select last_name,salary from employees where salary not between 8000 and 17000 order by salary desc;
##例子3:查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
select *,length(email){为了看字节数是不是排序可以加上} from employees where email like '%e%' order by length(email) desc,department_id asc;
#进阶4:常见函数
功能:概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
好处:1、隐藏了实现细节 2、提高代码的重用性
调用:select函数名(实参列表)【from表】;
特点:一、加什么(函数名)
二、干什么(函数功能)
##DML(data manipulation language数据操作)
增删改
##DDL(define)定义语言
库和表的管理
##TCL语言(transaction control)
事务控制语言