①MySQL之DQL数据查询语言一

sql脚本分享

链接: https://pan.baidu.com/s/1ckA70v0CgSFecKhAKiu1cA
提取码: 76th

1,sql、DB、DBMS分别是什么,他们之间的关系?

DB:DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)
DBMS:DataBase Management System(数据库管理系统,常见的有:MySQL、Oracle、DB2、Sybase、SQLServer...)
SQL:结构化查询语言(高级语言),是一门标准的通用的语言;标准的sql适合于所有的数据库产品。
    SQL语句在执行的时候,实际上内部也会先进行编译,然后再执行sql。(sql语句的编译由DBMS完成。)

DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据。
DBMS - (执行)-> SQL -(操作)-> DB        

2,什么是表?

表:table; table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
一个表包括行和列:
    行:被称为数据/记录(data)
    列:被称为字段(column)
        字段包含的属性:字段名、数据类型、相关的约束。

3,学习MySQL主要还是学习通用的SQL语句,SQL语句的分类:

DQL(数据查询语言):查询语句,凡是select语句都是DQL。
DML(数据操作语言):insert delete update,对表当中的数据进行增删改。
DDL(数据定义语言):create drop alter,对表结构的增删改。
TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中的T是Transaction)
DCL(数据控制语言):grant授权、revoke撤销权限等。

4,导入数据

第一步:登录mysql数据库管理系统
    本地登录$:mysql -uroot -p
    远程登录$:mysql -hIP地址 -uroot -p  
第二步:查看有哪些数据库
    mysql> show databases;(这个不是SQL语句,属于MySQL的命令)
第三步:创建属于我们自己的数据库
    mysql> create database sqltest;
第四步:使用sqltest数据库
    mysql> use sqltest;
第五步:查看当前使用的数据库中有哪些表?
    mysql> show tables;
第六步:初始化数据(source 路径)
    mysql> source /Users/a1/Desktop/Java/Simon_JavaSE/数据库/脚本文件/bjpowernode.sql

注意:看到这里如果没有sql脚本进行学习,可返回顶部[sql脚本分享]进行下载.
5,sqltest.sql这个文件以.sql结尾,这样的文件被称为“sql脚本”。当一个文件的扩展名是.sql,并且该文件中编写了大量的sql语句,我们称为这样的文件为sql脚本。注意:直接使用source命令可以执行sql脚本,sql脚本中的数量太大的时候,无法打开;请使用source命令完成初始化。

6,删除数据库:(drop database 数据库名称;)

mysql> drop database sqltest;

7,查看表结构:(dese 表名;)

mysql> desc dept;

8,表中的数据

mysql> select * from emp;

9,常用命令

查看当前使用的数据库
mysql> select database();
查看mysql版本号
mysql> select version();
终止一条语句
mysql> \c
退出mysql
mysql> exit  

10,查看创建表的语句:(show create table 表名;)

mysql> show create table emp;

11,简单的查询语句(DQL)

语法结构:
    select 字段1,字段2,字段3,... from 表名;
提示:1,任何一条sql语句都是以";"结尾。2,sql语句不区分大小写。
    查询员工年薪(字段可以参与数学预算):
        mysql> select ename , sal * 12 from emp;

    给查询结果的列重命名:
        mysql> select ename , sal * 12 as yearsal from emp;
        mysql> select ename , sal * 12 as '年薪' from emp;
注意:标准的sql语句中要求字符串使用单引号括起来。虽然mysql支持双引号,尽量别用。

12,条件查询

1,语法结构:
    select 字段1,字段2,字段3,... 
    from 表名
    where 条件;
    执行顺序:先from,然后where,最后select

2,查询SMITH的工资
    mysql> select sal from emp where ename = 'SMITH';

3,查询工资等于(大于、小于等于)3000的员工 
    mysql> select ename , sal from emp where sal = 3000;
    mysql> select ename , sal from emp where sal > 3000;
    mysql> select ename , sal from emp where sal <= 3000;

4,查询工资不等于3000的员工 
    mysql> select ename , sal from emp where sal <> 3000;
    mysql> select ename , sal from emp where sal != 3000;
5,查询工资在1100和3000之间的员工,包括1100和3000
    mysql> select ename , sal from emp where sal >= 1100 and sal <= 3000;
    mysql> select ename , sal from emp where sal between 1100 and 3000; // between...and... 是闭区间,左小右大。
    between...and... 使用的时候必须左小有大。
    between...and... 除了可以使用在数字方面之后,还可以使用在字符串方面
        mysql> select ename , sal from emp where ename  between 'a' and 'd'; // 左闭右开。

6,找出哪些人没有津贴?
    mysql> select ename ,sal,comm from emp where comm = 0 or comm is null;

    在数据库中NULL不是一个值,代表什么也没有,为空。空不是一个值,不能用等号衡量。
    必须使用 is null 或者is not null
    mysql> select ename ,sal,comm from emp where comm is null;
    mysql> select ename ,sal,comm from emp where comm is not null;

7,找出工作岗位是MANAGER和SALESMAN的员工?
    mysql> select ename ,job from emp where job = 'MANAGER' or  job = 'SALESMAN';
    
    in等同于or
    mysql> select ename ,job from emp where job in ( 'MANAGER' , 'SALESMAN');
    mysql> select ename , sal from emp where sal in (1100 , 3000); // in后面的值不是区间,是具体的值。
    
    not in:不在这个几个值当中
    mysql> select ename , sal from emp where not sal in (1100 , 1600 ,3000);

8,找出薪资大于1000并且部门编号是20或30的部门好员工(and和or联合使用)
    mysql> select ename ,sal ,DEPTNO from emp where sal > 1000 and (DEPTNO = 20 or DEPTNO = 30);
    注意:当运算符的优先级不确定的时候加小括号。

    模糊查询like: 找出名字当中含有o的?
        (在模糊查询当中,必须掌握两个特殊符号:1,'%'代表任意多个字符;2,'_'代表任意1个字符。)
        mysql> select ename from emp where ename like '%o%' ;
    找出第二个字母是A的名字?
    mysql> select ename from emp where ename like '_a%';
    找出名字中有下划线的( 斜杠具有转译作用)?
    mysql> select ename from emp where ename like '%\_%';  

13,排序order by(升序、降序)

1,按照工资升序,找出员工名和薪资
    mysql> select ename,sal from emp order by sal;
    mysql> select ename,sal from emp order by sal asc;
2,工资升序:
    mysql> select ename,sal from emp order by sal desc;

3,注意:默认是升序,asc表示升序,desc表示降序。

4,按照工资的降序排列,当工资相同的时候再按照名字的升序排列。
    mysql> select ename,sal from emp order by sal desc , ename asc;
    注意:越靠前的字段越能起到主导作用,只有当前面的字段无法完成排序的时候,才会启用后面的字段。

    找出工作岗位是SALESMAN的员工,并且要求按照薪资的降序排序    
    mysql> select ename,sal,job from emp where job = 'SALESMAN' order by sal desc;

14,分组函数:多行处理函数(输入多行,最终输入一行)

count:计数;sum:求和;avg:平均值;max:最大值;min:最小值。
所有的分组函数都是对“某一组”数据进行操作的。
分组函数自动忽略NULL。
SQL语句语法规则:分组函数不可直接使用在where字句当中。

count(*)和count(具体的某个字段),他们有什么区别?
    count(*):不是统计某个字段中数据的个数,而是统计总记录条数。
    count(具体的某个字段):表示统计某个字段中不为NULL的数据总数量。


找出工资总和:
    mysql> select sum(sal) from emp;
找出最高、最低工资:
    mysql> select max(sal) from emp;
    mysql> select min(sal) from emp;
找出平均工资:
    mysql> select avg(sal) from emp;
找出总人数:
    mysql> select count(ename) from emp;
分组函数自动忽略NULL
    mysql> select count(comm) from emp;
找出工资高于平均工资的员工
    错误写法:
    mysql> select ename,sal from emp where sal > avg(sal); // ERROR 1111 (HY000): Invalid use of group function
    
    正确写法:
    mysql> select ename,sal from emp where sal > (select avg(sal) from emp);

    分组函数不可直接使用在where字句当中。
        分组函数一般都会和group by联合使用;分组函数都是在group by语句执行结束之后才会执行。
        因为group by是在where执行之后才会执行的。

分组函数也能组合起来用:
    mysql> select count(*),sum(sal),avg(sal),max(sal),min(sal) from emp;

15,单行处理函数:输入一行,输出一行。

计算每个员工的年薪(包含津贴)
    mysql> select ename, (sal + comm) * 12 as yearsal from emp;
    重点:所有的数据库规定:只要有NULL参与的运算结果一定是NULL。
ifnull()空处理函数:ifnull(可能为NULL的数据,被当做什么处理),属于单行处理函数
    mysql> select ename, (sal + ifnull(comm,0)) * 12 as yearsal from emp;

16,group by 和 having

group by :按照某个字段或者某些字段进行分组。
having :是对分组之后的数据进行再次过滤。
分组函数一般都会和group by联合使用;分组函数都是在group by语句执行结束之后才会执行。

找出每个工作岗位的最高薪资:
    mysql> select job, max(sal) from emp group by job;
找出每个工作岗位的平均薪资:
    mysql> select job, avg(sal) from emp group by job;

多个字段联合起来一块分组
找出每个部门不同工作岗位的最高薪资。
    mysql> select DEPTNO,job, max(sal) from emp group by DEPTNO , job ;
    mysql> select DEPTNO,job, max(sal) from emp group by DEPTNO , job order by DEPTNO desc; // 按DEPTNO降序排

找出每个部门的最高薪资,显示薪资大于2900。
    mysql> select DEPTNO, max(sal) from emp group by DEPTNO having max(sal) > 2900; // 效率低
    mysql> select DEPTNO, max(sal) from emp where sal > 2900 group by DEPTNO; // 效率高 建议能使用where就使用where
找出每个部门的平均薪资,显示薪资大于2000。
    mysql> select DEPTNO, avg(sal) from emp group by DEPTNO having avg(sal) > 2000; // 效率低

17,总结一个完整的DQL语句

    select     5
        ..
    from       1
        ..
    where      2
        ..
    group by   3
        ..
    having     4
        ..
    order by   6
        ..

下篇:②MySQL之DQL数据查询语言二

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

推荐阅读更多精彩内容