MySQL数据库——基础查询和条件查询
数据库的好处:
1.持久化数据到本地
2.可以实现结构化查询,方便管理
数据库相关概念:
DB:数据库(database)——存储数据的“仓库”。它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器。(数据库软件、数据库产品)
Oracle昂贵,服务收费(后期的维护和升级都是收费的)。
DB2:IBM公司。适合处理海量数据。
SqlServer:微软公司。只能安装在Windows操作系统。
SQL:结构化查询语言(Structure Query Language)。专门用来与数据库通信的语言。
SQL的优点:
1.不是某个特定的数据库应用商专有的语言,几乎所有DBMS都支持SQL
2.简单易学
3.虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
三者的关系:
数据库的特点:
1.将数据放到表中,表再放到库中。
2.一个数据库可以有多个表,每个表都有一个自己的名字标识自己。表名具有唯一性。
3.表具有一些特性,这些特性定义了数据来表中如何存储,类似java中“类”的设计。
4.表由列组成,我们也成为字段。所有表都是由一个或多个列组成的,每一列类似于java中的“属性”。
5.表中的数据是按行存储的,每一行相当于java中的“对象”
MySQL:关系数据库软件。
MySQL数据库一开始隶属于MySQL AB公司,总部位于瑞典,后被oracle收购。
优点:
1.成本低:开源免费
2.性能高:执行很快
3.简单:很容易安装和使用
DBMS分为两类:
1.基于共享文件系统的DBMS(表格,比如微软的excel)
3.基于客户机——服务器的DBMS(一般所说的安装数据库都是说安装服务端)
MySQL服务的启动和停止:
net stop mysql
net start mysql
启动之后才能刷卡登录。
登录方式:
1.通过mysql自带的客户端:不够灵活,仅限于root用户
2.通过Windows资道的客户端:mysql -h 主机名 -P 端口号 -u 用户名 -p密码
退出:
exit或者ctrl+C
MySQL常用语句:
语法规范:
1.不区分大小写,但是建议关键字大写,表名列名大写
2.每条命令用分号结尾
3.每条命令根据需要进行缩进或者换行
4.注释
单行注释:#注释文字
大巷注释:-- 注释文字(注意--后有个空格)
多行注释:/*注释文字*/
SQL语言的学习:
#进阶1:基础查询 /* 语法: select 查询列表 from 表名; 类似于:System.out.println(打印东西) 特点: 1、查询列表可以是:表中的字段、常量、表达式、函数 2、查询的结果是一个虚拟的表格 */ #先打开库 USE myemployees; #1、查询表中的单个字段 SELECT last_name FROM employees ; #2、查询表中的多个字段 SELECT last_name, salary, email FROM employees ; #2、查询表中所有字段 SELECT `employee_id`,#着重号用于区分字段和关键字 `first_name`, `last_name`, `email`, `phone_number`, `job_id` FROM employees ; #方式二: SELECT * FROM employees ; #4、查询常量值 SELECT 100; SELECT 'join'; #5、查询表达式 SELECT 100*98; SELECT 100&98; #6、查询函数 SELECT VERSION(); #7、给字段起别名 #便于理解 #如果要查询的字段有别名的情况,使用别名可以区分开来 #方式一: SELECT 100 % 98 AS 结果 ; SELECT lase_name AS 姓, first_name AS 名 FROM employees ; #方式二: SELECT lase_name 姓, first_name 名 FROM employees; #8、去重 #查询员工表中设计的所有部分标号 selectd DISTINCT department_id FROM employees; #9、+号的作用 #案例:查询员工名和姓连接成一个字段,显示为 姓名 #仅仅只有一个功能:运算符 #select 100+90;两个操作数都为数值型 #select '123'+90;有其中一方为字符型,试图将字符型数值转换为数值型,如果转换成功则继续加法运算 #select 'abc'+90;如果转换失败,字符型会被转换成0 #select null+90;只要一方结果为null,结果肯定为null SELECT CONCAT('a','b','c') AS 结果; SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees ;
#1. 下面的语句是否可以执行成功 可以! SELECT last_name , job_id , salary AS sal FROM employees; #2. 下面的语句是否可以执行成功 可以! SELECT * FROM employees; #3. 找出下面语句中的错误 SELECT employee_id , last_name, salary * 12 “ANNUAL SALARY” FROM employees; #逗号、英文双引号 #4. 显示表departments的结构,并查询其中的全部数据 DESC departments; SELECT * FROM departments; #5. 显示出表employees中的全部job_id(不能重复) SELECT DISTINCT job_id FROM employees; #6. 显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT SELECT CONCAT( `first_name`, `,`, `last_name`, `,`, `email`, `,`, `phone_number`, `,`, `job_id`, `,`, `salary`, `,`, `commission_pct`, `,`, `manager_id`, `,`, `department_id`, `,`, `hiredate` ) AS out_put FROM employees ;
进阶 2 :条件查询 /* 语法: select 查询列表 from 表名(①) where 筛选条件;(②) 当条件成立,显示出来,相当与if(条件) 分类: 1、按条件表达式筛选 条件运算符:> < = <>(不等) >= <= 2、按逻辑表达式筛选 逻辑运算符: && || ! and or not(推荐使用) 3、模糊查询 like between and in is null */ #按照条件表达式查询 #案例 1 :查询员工工资》 12000 的 SELECT * FROM employees 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 <= 12000 ; #案例2:查询部门彪悍不是90-100之间或者工资高于15000的员工信息 SELECT * FROM employees WHERE department_id < 90 OR department_id > 100 OR salary > 15000 ; #三、模糊查询 /* like ①特点:一般和通配符搭配使用 通配符: % 任意多个字符,包含0个 _ 任意单个字符,就一个 between in is null is not null */ #1、like #案例1:查询员工名中包含字符a的员工信息 SELECT * FROM employees WHERE last_name LIKE '%a%' ; #案例2:查询员工名中第三个字符为n的,第五个字符为l的员工名和工资 SELECT last_name, salary FROM employees WHERE last_name LIKE '__n_l%'; #案例3:查询员工名中第二个字符为_的员工 SELECT last_name FROM employees WHERE last_name LIKE '_\_%'; #2、between and /* 使用可以提高简洁度,前后闭区间,包含临界值,两个临界值不可以颠倒顺序。 */ #案例1:查询员工编号100-120之间的 SELECT * FROM employees WHERE employee_id >= 100 AND employee_id <= 120 ; SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120 ; #3、in #用于判断某字段的值是否属于in列表中的一项 #使用in提高语句简洁度 #in列表的值类型必须统一或兼容 #in列表中不能使用%这些符号,因为in是=操作 #案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号 SELECT last_name, job_id FROM employees WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES') ; #4、is null # = <>不能用于判断null值 #is只能和null搭配 #案例:查询没有奖金的员工名 SELECT last_name FROM employees WHERE commission_pct IS NULL ; #安全等于<=> #可以判断null值 #案例1:查询没有奖金的员工名 SELECT last_name FROM employees WHERE commission_pct <=> NULL ; #判断是否等于 #is null pk <=> #is null :仅仅可以判断 null 值,可读性较高,建议使用 <=> :既可以判断 null 值,又可以判断普通的数值,可读性较低 #2、查询员工号为176的员工姓名和部门号和年薪 SELECT last_name, department_id, salary * 12 * (1+ IFNULL(commission_pct, 0) AS 年薪 FROM employees ;
进阶 2 :条件查询 /* 语法: select 查询列表 from 表名(①) where 筛选条件;(②) 当条件成立,显示出来,相当与if(条件) 分类: 1、按条件表达式筛选 条件运算符:> < = <>(不等) >= <= 2、按逻辑表达式筛选 逻辑运算符: && || ! and or not(推荐使用) 3、模糊查询 like between and in is null */ #按照条件表达式查询 #案例 1 :查询员工工资>12000 的 SELECT * FROM employees 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 <= 12000 ; #案例2:查询部门彪悍不是90-100之间或者工资高于15000的员工信息 SELECT * FROM employees WHERE department_id < 90 OR department_id > 100 OR salary > 15000 ; #三、模糊查询 /* like ①特点:一般和通配符搭配使用 通配符: % 任意多个字符,包含0个 _ 任意单个字符,就一个 between in is null is not null */ #1、like #案例1:查询员工名中包含字符a的员工信息 SELECT * FROM employees WHERE last_name LIKE '%a%' ; #案例2:查询员工名中第三个字符为n的,第五个字符为l的员工名和工资 SELECT last_name, salary FROM employees WHERE last_name LIKE '__n_l%'; #案例3:查询员工名中第二个字符为_的员工 SELECT last_name FROM employees WHERE last_name LIKE '_\_%'; #2、between and /* 使用可以提高简洁度,前后闭区间,包含临界值,两个临界值不可以颠倒顺序。 */ #案例1:查询员工编号100-120之间的 SELECT * FROM employees WHERE employee_id >= 100 AND employee_id <= 120 ; SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120 ; #3、in #用于判断某字段的值是否属于in列表中的一项 #使用in提高语句简洁度 #in列表的值类型必须统一或兼容 #in列表中不能使用%这些符号,因为in是=操作 #案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号 SELECT last_name, job_id FROM employees WHERE job_id IN ('IT_PROG', 'AD_VP', 'AD_PRES') ; #4、is null # = <>不能用于判断null值 #is只能和null搭配 #案例:查询没有奖金的员工名 SELECT last_name FROM employees WHERE commission_pct IS NULL ; #安全等于<=> #可以判断null值 #案例1:查询没有奖金的员工名 SELECT last_name FROM employees WHERE commission_pct <=> NULL ; #判断是否等于 #is null pk <=> #is null :仅仅可以判断 null 值,可读性较高,建议使用 <=> :既可以判断 null 值,又可以判断普通的数值,可读性较低 #2、查询员工号为176的员工姓名和部门号和年薪 SELECT last_name, department_id, salary * 12 * (1+ IFNULL(commission_pct, 0)) AS 年薪 FROM employees ; #测试题 #1. 查询没有奖金,且工资小于 18000 的 salary 、 last_name SELECT salary, last_name FROM employees WHERE commission_pct IS NULL AND salary < 18000 ; #2、查询employees中,job_id不为"IT"或者工资为12000的员工信息 SELECT * FROM employees WHERE job_id <> 'IT' OR salary = 12000 ; #3.查询表的结构 DESC departments; #4、查询部门departments表中涉及到了哪些位置编号 #distinct是去重命令 SELECT DISTINCT location_id FROM departments ; #5、经典面试题 /* 试问:select * from employees 和 select * from employees where commission_pct like '%%' and last_name like '%%'; 结果是否一样?并说明原因 */ 不一样!如果判断的字段有NULL值,不一样;如果没有NULL就一样了。 /* 试问:select * from employees 和 select * from employees where commission_pct like '%%' or last_name like '%%'; 结果是否一样?并说明原因 */ 使用OR那就一样了,总归有一个字段不为NULL
总结:
与MySQL的第一次亲密接触
一、数据库的好处
1、可以持久化数据到本地(借助数据库管理工具,将数据最终存储到本地)
2、结构化查询(方便管理)
二、数据库的相关概念
1、DB:数据库。存储数据的容器
2、DBMS:数据库管理系统,又称为数据库软件或产品。专门用来创建或管理BD
3、SQL:结构化查询语言。用于和数据库通信的语言,不是某个数据库软件特有的,几乎所有的主流的数据库软件通用的语言
三、数据库存储数据的特点
1、数据存放到表中,然后表再放到库中
2、一个库中可以有多张表,每张表具有唯一的表名用来标识自己
3、表中有一个或者多个列,列又称为“字段”,相当于java中的“属性”
4、表中每一行数据相当于java中说的“对象”
四、常见的数据库管理系统
1、MySQL:关系数据库管理软件。
2、Oracle:
3、DB2:
4、SqlServer:
MySQL介绍
一、MySQL背景
前身属于瑞典的一家公司,MySQL AB
08年被sun公司收购
09年sun被Oracle公司收购
二、MySQL优点
1、开源、免费、成本低
2、性能高、移植性好
3、体积小,便于安装
三、MySQL的安装
属于C/S架构软件,既有服务端也有客户端,一般来讲安装服务端。
企业版
社区版
四、MySQL服务的启动和停止
方式一:计算机——右击——管理——服务
方式二:命令行net start 服务名
net stop 服务名
五:MySQL服务的登录和退出
登录:mysql 【-h主机名 -P端口号】 -u用户名 -p密码
注意:-p和密码之间不能加空格!
退出:exit或ctrl+C
DQL语言:查询语言
一、语法
select 查询列表
from 表名;
二、特点
1、查询列表可以是字段、常量、表达式、函数,也可以是多个
2、查询结果是一个虚拟的表
三、示例
1、查询单个字段
select 字段名 from 表名;
2、查询多个字段
3、查询所有字段
select * from 表名;
4、查询常量
select 常量值;(不加from,加了也不会报错,但是没用)
注意:字符型和日期型的常量必须用单引号,数值型不用
5、查询函数
select 函数名(实参列表);
6、查询表达式
select 100/124;
7、起别名
①as
②空格
8、去重
select distinct 字段名 from 表名;
select distinct a,b from表名;不能这么写!
9、+
作用:做加法运算
select 数值+数值;直接运算
select 字符+数值;先试图将字符转换成数值,如果成功则运算,否则转换成0进行运算
select null+任何值;结构都为null
10、concat函数
功能: select concat(字符1,字符2,字符3...);拼到一起充当一个字符
11、ifnull函数
功能:判断某字段或表达式是否为null,如果为null,返回指定值,否则返回原本值
12、isnull函数
功能:判断某字段或者表达式是否为null,如果是,则返回1,否则返回0
条件查询
一、语法
select 查询列表
from 表名
where 筛选条件;
二、筛选条件的分类
1、简单条件运算符
> < = <> != <=>(安全等于) >= <=
2、逻辑运算符
&& || ! and or not
3、模糊查询(复杂条件运算符)
like between and in is null is not null
like:一般搭配通配符使用,用于判断字符型数值,现在的版本也可以判断数值型
select * from employees where department_id like '1__';
通配符:%任意多个字符
_任意单个字符
between and 可读性变高
is null 专门用来判断null值