《尚硅谷》MySQL系统课程一共6天,下面介绍第1天的学习内容,主要涉及MySQL的内容介绍、进阶1基础查询和进阶2条件查询。干货满满,跟着课程的进度来的,可能篇幅略长,但是看完一定会有收获,那我们现在开始吧。
目录
与MySQL的第一次亲密接触
一、为什么要学习数据库
保存数据的容器:数组,集合(前两个内存),文件
数据库的好处:实现数据持久化;使用完整的管理系统统一管理,便于查询
二、数据库的相关概念
1.DB 数据库(database):存储数据的仓库,它保存了一系列有组织的数据。
2.DBMS数据库管理系统(Database Management System):数据库是通过DBMS创建和操作的容器。
常见的数据库管理系统:MySQL、Oracle(贵)、DB2(海量数据)、SqlServer(只能安装在windows系统下)等
3.SQL结构化查询语言(Structure Query Language),用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言。
SQL的优点:
①不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL
②简单易学
③虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
三、数据库存储数据的特点
1、数据存放到表中,然后表再放到库中
2、一个库中可以有多张表,每张表具有唯一的表名用来标识自己
3、表具有一些特性,这些特性定义了数据在表中如何存储,类似于java中“类”的设计
4、表中有一个或多个列,列又称为“字段”,相当于java中“属性”
5、表中的每一行数据,相当于java中“对象”
四、初识MySQL
MySQL产品的介绍
(一)MySQL的背景
前身属于瑞典的一家公司,MySQL AB
08年被sun公司收购
09年sun被oracle收购
(二)MySQL的优点
1、开源、免费、成本低
2、性能高、移植性也好
3、体积小,便于安装
(三)MySQL的安装
属于c/s架构的软件,一般来讲安装服务端
• DBMS分为两类:
– 基于共享文件系统的DBMS (Access )
– 基于客户机——服务器的DBMS (MySQL、Oracle、SqlServer)
企业版(收费)
社区版(免费)
Windows平台下下载:http://dev.mysql.com/downloads/mysql
第一次安装建议放在默认路径下,一般在C盘,安装过程一直点击下一步。
(四)MySQL服务的启动和停止
方式一:通过命令行 以管理员身份运行cmd
net start 服务名
net stop 服务名
方式二:计算机——右击——管理——服务
(五)MySQL服务的登录和退出
方式一:通过程序自带的客户端登录(这种方式不建议使用,只适用于windows用户)
退出:输入exit或者Ctrl + C
方式二:通过windows自带的客户端登录
mysql 【-h 主机名 -P 端口号】 -u 用户名 -p密码
例如:C:\WINDOWS\system32>mysql -hlocalhost -P3306 -u root -p
回车--输入隐藏密码
简写:C:\WINDOWS\system32>mysql -u root -p 默认连接本机
退出:exit或ctrl+C
(六)MySQL常见的命令
1.查看当前所有的数据库
show databases;
2.打开指定的库
use 库名;
3.查看当前库的所有表
show tables;
4.查看其它库的所有表
show tables from 库名;
5.创建表
create table 表名(
列名 列类型,
列名 列类型,
......
);
6.查看表结构
desc 表名;
7.查看服务器的版本
方式一:登录到mysql服务端
select version();
方式二:没有登录到mysql服务端
mysql --version
或
mysql --V
(七)Mysql语法规范
1.不区分大小写,但建议关键字大写,表名、列名小写
2.每条命令最好用分号结尾
3.每条命令根据需要,可以进行缩进或换行
4.注释
单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/* 注释文字 */
(八)图形化用户界面客户端的安装
推荐:SQLyog客户端 Navicat Premium客户端(可自行搜索安装)
(九)SQL的语言分类
1、DQL语言的学习--数据查询语言
基础查询
条件查询
排序查询
常见函数
分组函数
分组查询
连接查询
子查询
分页查询
union联合查询
2、DML语言的学习--数据操作语言
插入语句
修改语句
删除语句
3、DDL语言的学习--数据定义语言
库与表的管理
常见数据类型介绍
常见约束
4、TCL语言的学习--事务控制语言
事务与事务处理
(十)补充
1、视图的讲解
2、存储过程和函数
3、流程控制结构
进阶1:基础查询
语法:
select 查询列表 from 表名;
类似于:System.out.println(打印东西);
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
代码分析:
USE myemployees;
#1.查询表中的单个字段
SELECT last_name FROM employees;
#2.查询表中的多个字段
SELECT last_name,salary,email FROM employees;
#3.查询表中的所有字段
#方式一:
SELECT
`employee_id`,
`first_name`,
`last_name`,
`phone_number`,
`last_name`,
`job_id`,
`phone_number`,
`job_id`,
`salary`,
`commission_pct`,
`manager_id`,
`department_id`,
`hiredate`
FROM
employees ;
#方式二:
SELECT * FROM employees;
#4.查询常量值
SELECT 100;
SELECT 'john';
#5.查询表达式
SELECT 100%98;
#6.查询函数
SELECT VERSION();
#7.起别名
/*
①便于理解
②如果要查询的字段有重名的情况,使用别名可以区分开来
*/
#方式一:使用as
SELECT 100%98 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
#方式二:使用空格
SELECT last_name 姓,first_name 名 FROM employees;
#案例:查询salary,显示结果为 out put
SELECT salary AS "out put" FROM employees;
#8.去重
#案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees;
#9.+号的作用
/*
java中的+号:
①运算符,两个操作数都为数值型
②连接符,只要有一个操作数为字符串
mysql中的+号:
仅仅只有一个功能:运算符
select 100+90; 两个操作数都为数值型,则做加法运算
select '123'+90;只要其中一方为字符型,试图将字符型数值转换成数值型
如果转换成功,则继续做加法运算
select 'john'+90; 如果转换失败,则将字符型数值转换成0
select null+10; 只要其中一方为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 AS "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
IFNULL(commission_pct,0) AS 奖金率,
commission_pct
FROM
employees;
#-------------------------------------------
SELECT
CONCAT(`first_name`,',',`last_name`,',',`job_id`,',',IFNULL(commission_pct,0)) AS out_put
FROM
employees;
进阶2:条件查询
语法:
select 查询列表 ③
from 表名 ①
where 筛选条件 ② ;
分类:
1、按条件表达式筛选
简单条件运算符:> < = != <> >= <=
2、按逻辑表达式筛选
逻辑运算符:
作用:用于连接条件表达式
&& || !
and or not
&&和and:两个条件都为true,结果为true,反之为false
||或or: 只要有一个条件为true,结果为true,反之为false
!或not: 如果连接的条件本身为false,结果为true,反之为false
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:查询工资z在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<=110) OR salary>15000;
#三、模糊查询
/*
关键字:
like
between and
in
is null|is not null
*/
#1.like
/*
特点:
①一般和通配符搭配使用
通配符:
% 任意多个字符,包含0个字符
_ 任意单个字符
*/
#案例1:查询员工名中包含字符a的员工信息
select
*
from
employees
where
last_name like '%a%'; #abc
#案例2:查询员工名中第三个字符为n,第五个字符为e的员工名和工资
select
last_name,
salary
FROM
employees
WHERE
last_name LIKE '__n_e%';
#案例3:查询员工名中第二个字符为_的员工名
SELECT
last_name
FROM
employees
WHERE
last_name LIKE '_$_%' ESCAPE '$';#last_name LIKE '_\_%';
#2.between and
/*
①使用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列表中不支持通配符
*/
#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';
#------------------
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');
#4、is null
/*
=或<>不能用于判断null值
is null或is not null 可以判断null值
*/
#案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NULL;
#案例2:查询有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct IS NOT NULL;
#----------以下为×(错误)
SELECT
last_name,
commission_pct
FROM
employees
WHERE
salary IS 12000;
#推荐:安全等于 <=>
#案例1:查询没有奖金的员工名和奖金率
SELECT
last_name,
commission_pct
FROM
employees
WHERE
commission_pct <=>NULL;
#案例2:查询工资为12000的员工信息
SELECT
last_name,
salary
FROM
employees
WHERE
salary <=> 12000;
#is null pk <=>
IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低
说明:记录学习笔记,如果错误欢迎指正!转载请联系我。