目录
⑤ 查看某个数据库下有哪些表?(先选择数据库再查看当下数据库的表)
⑩ 不看表中的数据,只看表的结构,有一个命令(describe缩写为:desc):
⑦ str_to_date 将字符串转换成日期 date_format 格式化日期 format 设置千分位
⑧ case..when..then..when..then..else..end
⑩ ifnull 空处理函数 (将null 转换为 具体值)
一、什么是数据库?什么是数据库管理系统?什么是SQL?
1、数据库:
- database,简称:DB,按照一定格式存储数据的一些文件的组合。
- 顾名思义,存储数据的仓库,实际上就是一堆文件。这些文件中存储了特定格式的数据。
2、数据库管理系统:
- DataBasemMnagement,简称DSMS
- 数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据进行增删改查。
- 常见的数据库管理系统:MySQL、Oracle、MS SQLserver、DB2、sybase等。。。
3、SQL:
- 结构化查询语言
- 程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL语句,最终来完成数据库中数据的增删改查操作。
- SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,同时在Oracle中也可以使用,在DB2中也可以使用。
4、三者之间的关系?
- DBMS--执行--> SQL --操作--> DB
二、MySQL常用命令
1、用命令启动停止MySQL服务
语法:net start 服务名称;
net stop 服务名称;
(要用管理员身份打开cmd才有权限)其它服务的启停都可以采用以上的命令。
2、服务启动了,怎么使用客户端登录mysql数据库呢?
语法:mysql -u root -p123456 (显示密码)或 mysql -u root -p (隐藏密码)
3、MySQL 常用命令
① 退出MySQL :exit
② 查看mysql中有哪些数据库?
show databases;
#注意:以分号结尾,分号是英文的分号。
③ 怎么选择使用某个数据库呢?
use sys;

④ 怎么创建数据库呢?
create database test;

⑤ 查看某个数据库下有哪些表?(先选择数据库再查看当下数据库的表)
show tables;

⑥ 查看mysql数据库的版本号:
select version();
⑦ 查看当前使用的是哪个数据库
select database();
注意:
- 以上的命令不区分大小写;
- mysql是不见“;”不执行,“;”表示结束!
- \c用来终止一条命令的输入。
⑧ 导入数据表库.sql(得先创建一个同名的数据库)
bjpowernode.sql 资源(提取码:sl9v)https://pan.baidu.com/s/1grtAeFGM71BIjrKfhNsGkA
source C:\Users\86184\Desktop\SQL\bjpowernode.sql
导入完成!
查看数据库的表单,(dept是部门表;emp是员工表;salgrade 是工资等级表)
⑨ 怎么查看表中的数据呢?
select * from 表名;
select * from dept;
select * from emp;
select * from salgrade;
⑩ 不看表中的数据,只看表的结构,有一个命令(describe缩写为:desc):
desc 表名;
desc dept;
desc emp;
desc salgrade;
4、表(table)
数据库当中是以表格的形式表示数据的,表是数据库最基本的单元。
5、SQL语句的分类
6、select语句
(1)简单查询
①查询表中的字段(查询两个字段时,用逗号隔开)
select 字段 from 表名;
要想查询所有字段?
- 方法1:列出所有字段
- 方法2:用*代替所有字段
② 给查询的列起别名?
#用as 或者 空格 隔开 原名 和 别名;
select JOB,SAL as SL from emp;
select JOB,SAL SL from emp;
#别名中有空格时,用单引号或者双引号把别名括起来
- 用单引号才标准,双引号在Oracle数据库用不了
- 别名是中文也用单引号括起来
select JOB,SAL "S L" from emp;
注意:
- 只是把显示的查询结果列名显示为‘SL’,原列名还是‘SAL’;
- select语句永远不会进行修改操作,只是负责查询。
③ 字段的计算(字段可以使用数学表达式!)
例如:计算员工年薪?
7、条件查询 (where)
select ename,sal from emp where sal = 800 or sal = 5000 or sal=3000;
select ename,sal from emp where sal in(800, 3000,5000);
想找出名字中有_的?(用转义字符对_转义)
mysql> select ename,empno from emp where ename like '%\_%';
8、排序(order by)
select ename,sal from emp order by sal;//默认升序排序
select ename,sal from emp order by sal desc;//指定降序
select ename,sal from emp order by sal asc;//指定升序
两个字段排序?条件A如果相等,按照条件B排序。
select ename,sal from emp order by sal asc,ename asc;
注意:在前的条件起主导
了解:根据字段的位置也可以排序
- select ename,sal from emp order by 2;
// 2表示第二列。第二列是sal按照查询结果的第2列sal排序。了解一下,不建议在开发中这样写,因为不健壮。因为列的顺序很容易发生改变,列顺序修改之后,2就废了。
练习题:
找出工资在1250到3000之间的员工信息,要求按照薪资降序排列。
select ename,sal from emp where sal between 1250 and 3000 order by sal desc;
9、数据处理函数(又称单行处理函数)
- 特点:一个输入对应一个输出
- 对应的函数是:多行处理函数:多个输入一个输出
常见的单行处理函数:
① 转换小写 lower
select lower(ename) as ename from emp;
② 转换大写 upper
③ 取子串 substr
select substr(ename,1,1) as ename from emp;
练习:(找出员工名字第一个字母是A的员工信息?)
方法一:
方法二:
④ 字符串的拼接 concat
⑤ 取长度 length
⑥ 去空格 trim
⑦ str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位
⑧ case..when..then..when..then..else..end
练习:当员工的工作岗位是MANAGER的时候,工资上调10%,当工作岗位是SALESMAN的时候,工资上调50%,其它正常。
select ename,job,sal as oldsal,(case job when 'manager' then sal*1.1 when 'salesman' then sal*1.5 else sal end) as newsal from emp;
⑨ 四舍五入 round 生成随机数 rand()
select后面可以跟某个表的字段名(可以等同看做变量名),也可以跟字面量/字面值(数据)。
⑩ ifnull 空处理函数 (将null 转换为 具体值)
计算每个员工的年薪?
select ename,(sal+ifnull(comm,0))*12 as salcomm from emp;
10、分组函数(多行处理函数)
计算最高工资?最低工资?总工资?平均工资?人数?
使用分组函数时应注意:
- 分组函数自动忽略NULL
- 分组函数中count(*)和count(具体字段)有区别;
- 分组函数不能够直接使用在where子句中。找出比最低工资高的员工信息?
- 所有的分组函数可以组合起来一起用。
11、分组查询****(非常重要!!!)group by
先分组,再查询
计算每个工作岗位的工资和?
计算每个工作岗位的平均薪资?
找出每个工作岗位的最高薪资?
练习:找出“每个部门,不同工作岗位”的最高薪资?
练习:找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER岗位之外,要求按照平均薪资降序排。
select job,avg(sal) from emp where job <>'manager' group by job having avg(sal)>1500 order by avg(sal) desc;