一、数据库的好处
- 可以持久话数据到本地
- 结构化查询(SQL)
二、数据库的常见概念 *
- DB:数据库 存储有组织的数据的容器
- DBMS:数据库管理系统,又称为数据库软件或者数据库产品(eg. MySQL),用于创建和管理数据库
- SQL:结构化查询语言:与数据库通信,实现数据库操作,几乎所有的主流的数据库软件通用的语言
三、数据库存储的特点
- 数据存到表中,表再放到库中
- 一个库中可以有多张表,每张表具有唯一的表名来标识自己
- 表中有一个或多个列,列又称为“字段”(相当于Java类中的属性)
- 表中的每一行数据,相当于Java中的“对象”
四、MySQL的安装
属于c/s架构的软件,一般来讲,安装的是服务端
五、MySQL的启动、停止、登陆和退出
net start 服务名 net stop 服务名
mysql [-h 主机名 -P 端口号] -u 用户名 -p密码
exit
六、DQL(数据查询)语言
#进阶1:基础查询 /* 语法:select 查询列表 from 表名;(MySql 不区分大小写) 特点: 1、查询列表为:表中的字段、常量值、表达式和函数 2、查询结果是一个虚拟的表格 */ #启动制定的库(安全) USE myemployees; #查询表中的单个字段 SELECT last_name FROM employees; #查询表中的多个字段 SELECT last_name, salary, email FROM employees; #查询表中的所有字段, *代表所有的字段(字段的顺序与原始表相同) SELECT * FROM employees; #查询常量 SELECT 100; SELECT 'a'; #查询表达式 select 100%98; #查询函数 select version(); #更该字段的名称(1、便于理解;2、使用别名能区分重名的字段) #方法一:使用as select 100%98 as 结果; select last_name as 姓, first_name as 名 from employees; #方法二:使用空格 select 100%98 结果; #特例:查询salary,显示结果为out put(这里有空格) select salary as "out put" from employees; #去重 DISTINCT #select department_id from employees; select distinct department_id from employees; # +号的作用 /* mysql中的+号仅表示运算符 eg. select 100 + 9; select 'john' + 90; #试图将字符(串)123转换为数值。 如果成功,则将字符型转换为数值,继续做加法运算; 如果不成功,则将字符型转换为0; select null + 90; null 加任何值均为null */ #案例:连接姓和名,组合成姓名,使用函数 CONCAT() select concat(last_name, first_name) as 姓名 from employees; #显示表的结构 desc employees;
#进阶2:条件查询 /* 语法: select 查询列表 #查询 from 表名 #第一步 where 筛选条件 #筛选 分类: 1、按条件表达式筛选 条件运算符:>,<,=,<>,>=,<= 2、按照逻辑表达式筛选 逻辑运算符:and or not(&& || !) 作用:用于连接条件表达式 3、模糊查询:like、between and、in、is null */ #按条件表达式筛选 #案例1、查询工资>12000的员工信息 SELECT * FROM employees WHERE salary > 12000; #案例1、查询部门编号不等于90的员工名和部门编号 SELECT last_name, department_id FROM employees WHERE department_id <> 90; #按照逻辑表达式筛选 #案例1、查询工资在10000-20000的员工信息 SELECT * FROM employees WHERE salary >= 10000 AND salary <= 20000; SELECT * FROM employees WHERE NOT(department_id >= 90 AND department_id <= 110) OR salary >15000; #进阶3:模糊查询 /* like、between and、in、is null、is not null 特点:1、一般和通配符搭配使用 通配符: % 任意多个字符(包含0个字符) _ 任意单个字符 \ 表示转义字符; ESCAPE '*' 指定一个字符为转义字符 */ #案例1、查询员工名中包含字符a的员工信息,%表示通配符 SELECT * FROM employees WHERE first_name LIKE '%a%' OR last_name LIKE '%a%'; #案例2、查询员工名中第三个字符为e,第五个字符为a的员工名和工资 SELECT last_name, salary FROM employees WHERE last_name LIKE '__n_l%'; #案例3、查询员工名中第2个字符为下划线的员工名和工资(转义字符\) SELECT last_name, salary FROM employees #where last_name like '_\_%'; WHERE last_name LIKE '_*_%' ESCAPE '*'; /* between and 1、可以提高语句的简洁度; 2、左右都是闭区间 3、两个临界值不能颠倒 */ #案例4、查询员工编号在100到200之间的员工信息 SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 200; /* in 含义:用于判断某字段的值是否属于列表中的某一项 特点:1、使用in做筛选,能提高语句的简洁度 2、in列表中的值类型必须统一,或者兼容 3、IN等价于是否等于,列表中的每一项不支持通配符(通配符表示某一范围) */ #案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号 SELECT last_name, job_id FROM employees WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES'); /*is null 1、 =或者<> NULL 这种写法是不对的 2、is null 或者 is not null 可以判断null */ #案例:查询奖金率不为null的员工名和奖金率 SELECT last_name, commission_pct FROM employees WHERE commission_pct IS NOT NULL; /* 安全等于 <=> 既可以判断null值,又可以判断普通的数值 可读性较is null低 */ SELECT last_name, salary FROM employees #WHERE commission_pct <=> NULL; WHERE salary <=> 12000; #查询员工号为176的员工的姓名、部门号和年薪 SELECT last_name, department_id, salary*12*(1+IFNULL(commission_pct,0)) AS 年薪 FROM employees WHERE department_id = 100; #案例 SELECT * FROM employees WHERE job_id <> 'IT' OR salary = 12000; #查询表的结构信息 DESC departments; #查询部门departments中涉及到哪些位置编号 SELECT DISTINCT location_id FROM departments; #面试题:语句1和语句2的结果是否相同 #语句1 SELECT * FROM employees; #语句2 SELECT * FROM employees WHERE last_name LIKE '%'; #答案:不相同,因为通配符 % 不能匹配null的情况
注意:比较一下 is null 和<=>
普通类型的数值 null值 可读性 is null no yes yes <=> yes yes no