Day1 数据库基础

关系性数据库

关系型数据库管理系统(RDBMS)是应用最广泛的一种数据库管理系统,关系型数据库管理系统以表、字段和记录等结构来组织数据。表用来保存数据,每个表由一组字段来定义其结构,记录则是表中的一条数据。

结构化查询语言(SQL)

对数据库操作的普通话

结构化查询语言分类

  • 数据查询语言(DQL:Data Query Language):语句主要包括SELECT,用于从表中检索数据。
  • 数据操作语言(DML:Data Manipulation Language):语句主要包括INSERT,UPDATE和DELETE,用于添加,修改和删除表中的行数据。
  • 事务处理语言(TPL:Transaction Process Language): 语句主要包括COMMIT和ROLLBACK,用于提交和回滚。
  • 数据控制语言(DCL:Data Control Language):语句主要包括GRANT和REVOKE,用于进行授权和收回权限。
  • 数据定义语言(DDL:Data Definition Language):语句主要包括CREATE、DROP、ALTER,用于定义、销毁、修改数据库对象

Dos命令

dir列出所有文件
cls清屏
cd path路径

cd E:\PHP\phpstudy_pro\Extensions\MySQL5.7.26\bin
  • 链接数据库库命令
    mysql -hlocalhost -uroot - p

mysql 常用命令

  • show databases 显示所有数据库
  • use 数据库名 使用该数据库 use door
  • quit 退出数据库

基本查询语句

官方格式

SELECT [] 
select 列名 from 表名;
select deptno, dname, loc from dept;
  • 算术运算符
    让emp表中所有员工的工资 + 200,同时显示之前的工资和加薪之后的工资

  • select sal + 200 from emp;

  • select sal * 1.2 from emp;


    image.png
  • 员工试用期6个月,转正后月薪上调20%,请查询出所有员工工作第一年的年薪所得(不考虑奖金部分,年薪的试用期6个月的月薪+转正后6个月的月薪)

select ename, (sal*6+sal*1.2*6
) from emp;
  • 空值NULL
    任何运算符和NULL运算都是空值
select ename, sal*12+comm from emp;
image.png

列别名

使用列别名的方法

  • 方式1: 列名 列别名(空格)
  • 方式2: 列名 AS 列别名 (AS)
    以下三种情况列别名两侧需要添加双引号
  • 有空格的时候
  • 有特殊字符的时候
select ename 员工, sal 工资, comm 奖金 from emp;
image.png
select ename "员工 工人",sal 工资 from emp;
image.png
select ename 员工姓名, sal 工资收入, ifnull(comm) 奖金, sal*6+sal*1.2*6+ifnull(comm,0) 总收入 from emp;
image.png

知识点

  • nvl(列,值)如果列为空 ,那么给予相对于的值(oracle)特有

  • ifnull(列,值 ) 如果列为空 ,那么给予相对于的值(mysql)

  • select distinct deptno from emp; 清除重复行

    image.png

显示表结构

  • desc emp;


    image.png

where 语句

where 语句 可以作为查询的限定条件
格式: 在from之后

  • select ename , hiredate,deptno from emp where deptno = 30 ;
    image.png
  • varchar
    select ename, sal, hiredate, job from emp where job = 'manager';
    select ename, sal, hiredate, job from emp where job = "manager";
    image.png

在sql中字符串一般用单引号,双引号值用来放在单引号中

  • date类型

select * from emp where hiredate > '1982-01-01';

image.png

<> !=都为不等于

  • 查询职位为SALESMAN的员工编号、职位、入职日期。
    查询1985年12月31日之前入职的员工姓名及入职日期。
    查询部门编号不在10部门的员工姓名、部门编号

select empno , job, hiredate from emp where job = 'salesman';

image.png

select ename 员工姓名, hiredate 入职日期 from emp where hiredate >'1985-12-31 ';

image.png

select ename 员工姓名 , deptno 部门编号 from emp where deptno != 10;

image.png

执行顺序 先走from 然后筛选where 最后select

  • 特殊比较符


    image.png
  • select ename 入职日期, hiredate 入职日期 from emp where hiredate between '1982-01-23' and '1987-05-23
    image.png
  • select ename 员工姓名, deptno 部门编号 from emp where sal between 3000 and 5000;
    image.png
  • select ename 员工姓名, deptno 部门编号 from emp where deptno between 10 and 20;
    image.png
  • select ename 员工姓名 , empno 员工编号 from emp where mgr in (7902,7566,7788);
    image.png

模糊查询LIKE :

  • select * from emp where ename like 'M%';
  • select * from emp where ename like '_M%';
  • select * from emp where ename like '%M%';

%是匹配前后所有有M的 _ 只是一个占位符_M表示第二位是M的

  • select * from emp where job like 'MAN@_%'escape'@';

escape '...' 把什么字符设置为转义符号。

IS NULL 运算符

判断比较的值是否为null

查询名字以w开头。
select ename 员工姓名 from emp where ename like 'W%';
名字底数第二个字母为T的人
select ename 员工姓名 from emp where ename like '%T_ ';
查询奖金为NULL的人
select ename 员工姓名, IFNULL(COMM,0) 奖金 from emp where comm IS NULL;``

逻辑运算符

AND OR NOT
可以和 between and , like , in , is null一起使用

运算符的优先级

image.png
  • 排序

order by 语句

select  Distinct ename from where ... order by
select * fro
m emp order by ename;

排序规则 数字升序 由小到大 desc 逆序 放在最后
字母 A - Z

日期 小到大


执行顺序
先 from 后 where 在 select 最后order by

LIMIT语句

select 数据 FROM 数据源
LIMIT [start,]length;

说明: 接受一个或两个参数 一个参数从0返回n行 ,两个参数从开始返回length个

select * from emp limit 5,2;

LIMIT 在 order by 后面

多表链接

语法:

SELECT    table1.column, table2.column
FROM    table1, table2
WHERE    table1.column1 = table2.column2;

select * from emp, dept;

笛卡尔积:第一个表的所有行和第二个表的所有行都产生连接。
行数相乘,把所有情况列举出来
为了避免笛卡尔积的产生 , 我们在WHERE中列举条件

等值连接

select * from emp, dept where emp.deptno = dept.deptno;
image.png
  • select empno , ename, emp.deptno, loc from emp,dept where dept .deptno = emp.deptno and loc like 'new%';
    在前面打上表名能提高性能

限制歧义列名

  • 在用到多个表时可以使用表名作前缀来限定列;
  • 通过使用表前缀可以提高性能;
  • 通过使用列的别名可以区分来自不同表但是名字相同的列;

使用别名

表起完别名后,只能用别名

  • select e.ename 员工列表, e.job 工作, d.dname what from emp e, dept d where e.deptno = d.deptno;
  • 写一个查询,显示所有员工姓名,部门编号,部门名称。
    select e.ename 员工姓名, e.deptno 部门编号, d.dname 部门名称 from emp e, dept d where e.deptno = d.deptno;
  • 写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
    select e.ename 员工姓名, ifnull(e.comm,0) 奖金, d.loc 工作地点 from emp e, dept d where e.deptno = d.deptno and d.loc = 'chicago ';
  • 写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
    select e.ename 员工姓名, d.loc 工作地点 from emp e, dept d where e.deptno = d.deptno and e.ename like '%a% ';

非等值连接

select * from emp e, salgrade s where e.sal between s.losal and s.hisal;

多表连接写法分析

  • 查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序。
    select e.empno 员工编号, ename 员工姓名,e.sal 工资,s.grade 工资等级,d.loc 所在工作城市 from emp e, dept d, salgrade s where (e.deptno = d.deptno) and (e.sal between s.losal and s.hisal) order by s.grade
    image.png

自连接

自己和自己连接

  • 查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。
    

select w.ename 员工列表,w.empno 员工编号 , m.ename 领导列表, m.empno 领导编号 from emp w ,dept d, emp m where w.mgr = m.empno and w.deptno = d.deptno and d.loc in('new york','chicago') ;

交叉连接

创建一个员工表的交叉连接
就是笛卡尔积
select e.empno, e.ename, d.dname from emp e cross join dept d;

自然连接

相比于等值连接, 等值连接直接指明连接条件,自然连接是自己赵(两个表字段名相同,自动添加) 。自然连接无法控制用哪些字段连接.
select e.empno, e.ename, d.dname from emp e natural join dept d;

外连接

  • 左外连接
    左外连接以FROM句中的左边表为基表,该表所有
    select e.ename,e.deptno,d.dname from emp e left outer join dept d on e.deptno = d.deptno
  • 右外连接
    select e.ename,e.deptno,d.dname from emp e right outer join dept d on e.deptno = d.deptno

联系

  • 创建一个员工表和部门表的交叉连接。
    select * from emp cross join dept;

  • 使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期
    select e.ename 员工姓名, d.dname 部门名称, hiredate 入职日期 from emp e natural join dept d where hiredate > '1980-05-01';

    image.png

  • 使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
    select w.ename 员工姓名, m.ename 经理姓名 from emp w left outer join emp m on w.mgr = m.empno;

    image.png

  • 使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来
    select w.ename 员工姓名, m.ename 经理姓名 from emp w right outer join emp m on m.empno = w.mgr ;

image.png
  • 显示员工SMITH的姓名,部门名称,直接上级名称
    select w.ename , m.ename , d.dname from emp w , emp m , dept d where (d.deptno = w.deptno ) and(w.mgr = m.empno) and (w.ename ='smith');

    image.png

  • 显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。
    select e.ename 员工姓名, d.dname 部门名称, e.sal 工资, s.grade 工资级别 from emp e, dept d, salgrade s where (d.deptno = e.deptno) and ((e.sal > s.losal) and (e.sal < s.hisal)) and (s.grade > '4 ');

    image.png

  • 显示员工KING和FORD管理的员工姓名及其经理姓名。
    select w.ename 管理员名称, m.ename 下属名称 from emp w left outer join emp m on w.empno = m.mgr where w.ename in ('king','ford');

    image.png

  • 显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。
    select w.ename 员工姓名 , w.hiredate, m.ename 经理姓名, m.hiredate from emp w, emp m where w.mgr = m.empno and w.hiredate < m.hiredate;

    image.png

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343