MySQL学习笔记
一、为什么要学习数据库
数组:断电即失,无法实现数据持久化存储
集合:同数组
文件:存取复杂,不方便实现
DB:数据库:存储数据的“仓库”
DBMS:数据库管理系统,又称为数据库软件,用于管理DB中的数据
- 基于共享文件系统的DBMS
- 基于客户机——服务器(c/s架构)的
DBMS
(MySQL、Oracle、SqlServer)
SQL:结构化查询语言,用于和DBMS通信的语言
二、MySQL的启动与关闭
- ”此电脑“右击,点击”管理“,点击”服务和应用程序“,点击”服务“找到
MySQL
右击可选择”启动、暂停、停止等“操作 - 管理员身份运行CMD
net stop MySQL
停止MySQL(自己定义的MySQL在本机的名称,定义的什么填什么)运行net start MySQL
启动MySQL(同上)
三、使用cmd服务端的登录和退出
-
以管理员身份进入cmd控制台,输入
mysql -h(host主机) localhost -P(port端口号) 3306 -u(user)root -p(password)
这里输入比较详细,一般连接本机的端口号为3306的只需要输入mysql -u root -p
-
将所有内容都填在相应的命令后,密码也可不填回车后继续输入即可;
mysql -h localhost -P(port端口号) 3306 -u(user)root -p(password)123456
-h:host主机
-P:port端口号
-u:user用户名
-p:password密码
注:-p和密码之间不能有空格,-h和localhost,-P和3306,-u和root之间有无空格都可以
-
退出mysql:在CMD控制台输入:exit或直接用快捷键ctrl+c;
-
MySQL自带的客户端(只限于root用户)登录和退出。
四、常见的SQL命令
-
show database;——查看所有数据库
-
use test;(进入指定的库)
-
show tables;//查看test中的所有表
-
再查看mysql库中的所有表
show tables from mysql
注:目前还在test库中,我们只是在test库中查看了mysql库中的表
-
创建一个表
select database();//用于查看 create table stuinfo( id int, name varchar(20));
-
desc stuinfo;查看表结构
-
select *from stuinfo;查看数据
-
查看MySQL版本
- 在MySQL服务端中输入命令select version();
- 在控制台中输入mysql -V 、mysql -version
五、语法规范
- 不区分大小写,建议,关键字大写,表名,列名小写
- 每条命令最好以分号结尾
- 每条命令根据需要,可以进行缩进或换行
- 注释
- 单行注释:#注释文字
- 单行注释:-- 注释文字
- 多行注释:/注释文字/
六、SQL语言
1、DQL语言(Data Query Language)查询
1.1基础查询:语法
select 查询列表
from 表名;
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询结果是一个虚拟的表格。
1.1.1查询表中的单个字段
select last_name from employees;
1.1.2查询表中的多个字段
select last_name,first_name from employees;
1.1.3查询所有字段
select * from employees;
注:
1、在每次查询之前使用use标注操作的库名
2、着重符号“``”用于区分字段和关键字的情况下会被用到。
3、选中要执行的命令点击执行即可执行
1.1.4查询常量值
注:sql不区分字符和字符串,统一使用单引号
select 100;
select 'john';
1.1.5查询表达式
select 100*98;
1.1.6查询函数
select version();
1.1.7为字段起别名
1、便于理解
2、如果要查询的字段有重名的情况,可以使用别名区分。
1、使用AS
select 100%98 as 结果;
2、使用空格
select last_name 姓,first_name 名 from employees;
案例:查询工资,显示结果为out put
select salary as "out put" from employees;
如果遇到属性值,给别名加上双引号
1.1.8去重:distinct
案例:查询员工表中涉及到的所有的部门编号
select distinct department_id from employees;
1.1.9+号的作用
案例:查询为员工名和姓连接成一个字段,并显示为姓名。
select
last_name+frist_name as 姓名
from
employees;
java中的加号
1、运算符
2、拼接符
sql中的加号:只有一个功能:运算符
//两者都为数值型,做加法运算
select 100+60;
//只要其中一方为字符型,sql尝试将字符型转换为数值型,如果转换成功则继续做加法运算
select '123'+20;
//字符型如果转化失败,则将字符型转化为数值0;
select 'john'+90;
//只要一方为null则结果肯定为null
select null+10;
1.1.10拼接:concat('a','b','c'...)
实现上述案例:
select
concat(last_name,frist_name) as 姓名
from
employees;
1.1.11练习:
1、显示表departments的结构,并查询其中的全部数据
desc departments;
select * from departments;
2、显示出表中employees中的全部job_id,不能重复
select distinct job_id from employees;
3、显示出表employees的全部列,各列之间用逗号连接,列头显示成OUT_PUT
commission_pct 奖金率有可能为null导致拼接出来的字符串全部为null,因此需要使用ifnull()
函数
select
IFNULL(commission_pct,0) as 奖金率,
commission_pct
from
employees;
//案例答案
select
concat(last_name,','first_name,','job_id,','ifnull(commission_pct,0)) as OUT_PUT
from
employees;
1.2进阶:条件查询:语法
select
查询列表
from
表名
where
筛选条件;
分类:
1、按条件表达式筛选
条件运算符:= > < != <> >= <=\
2、按逻辑表达式筛选
逻辑运算符:&& || ! (sql中)and or not
3、模糊查询
like
between and
in
is null
1.2.1按条件表达式筛选
查询工资>12000的员工信息
select
*
from
employees
where
salary>12000;
查询部门编号不等于90号的员工名和部门编号
select
last_name,department_id
from
employees
where
department_id<>90;
1.2.2按逻辑表达式筛选
工资在10000-20000之间的员工名、工资以及奖金
select
last_name,salary,commission_pct
from
employees
where
salary>=10000 and salary<=20000;
查询部门编号不是在90到110之间,或者工资高于15000的员工信息
select
*
from
employees
where
salary>15000 or not (department_id>=90 and department_id<=110)
1.2.3模糊查询
like:一般和通配符搭配使用
between and
in
is null
is not null
1、like
%:任意多个字符包含0个字符
查询员工名中包含字符a的员工信息
select
*
from
employees
where
last_name like '%a%';//通配符%
_:任意单个字符
查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select
last_name,salary
from
employees
where
last_name like '__e_a%';
查询员工名中第二个字符为下划线的员工名
select
last_name
from
employees
where
last_name like '_\_%';
(使用转义字符“\”)
或者
通过使用ESCAPE
自己指定转移字符推荐
select
last_name
from
employees
where
last_name like '_$_%' escape '$';
2、between and
+ 提高代码的简洁性
+ 属于全闭合区间<= >=
+ 临界值不要调换顺序
查询员工编号在100到120之间的员工信息
select
*
from
employees
where
employee_id between 100 and 120;
3、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 和 is not null可以判断null值
查询没有奖金的员工名和奖金率
select
last_name,commission_pct
from
employees
where
commission_pct is null;
查询有奖金的员工名和奖金率
select
last_name,commission_pct
from
employees
where
commission_pct is not null;
安全等于:<=> 可以判断null值和普通数值
is null:仅仅可以判断null值,可读性较高,建议使用
<=>:既可以判断null值,又可以判断普通的数值,可读性较低,一般比较少用
查询员工号为176的员工的姓名和部门号和年薪
select
last_name,department_id,salary*12*(1+ ifnull (commission_pct,0))as 年薪
from
employees
where
commission_id = 176;