数据库

五迷三道 提交于 2019-12-23 05:51:27

MySQL

在使用数据库之前,先要知道有哪些SQL语句

  1. SQL:结构化查询语言,是一种规范,所有关系型数据库都遵循这个规范,但各家数据库允许存在差异,这种差异叫做方言

  2. SQL语句具体分为四部分:
    (1)DDL(Data Definition Language):数据定义语言,主要操作对象是库,表,如建库,删库等
    (2)DML(Data Manipulation Language):数据操作语言,主要对表中数据进行增删改操作
    (3)DCL(Data Control Language):数据控制语言,主要对数据库的一些权限的设置
    (4)DQL(Data Query Language):数据查询语言,主要对表中的数据进行查询(重点)

  3. DDL语句
    查询所有数据库:show databases;
    建库:create database 库名;
    删库:drop database 库名;
    在对表操作之前,要先进入一个库:use 库名;
    查询一个库中的所有表:show tables;
    建表:create table 表名(表头字段属性,…);
    查询表结构:desc 表名;
    删表:drop table 表名;
    清空表:truncate 表名;干掉表,重新创建一张新表
    具体操作:
    首先,你需要安装mysql环境,本文没有演示如何安装,可上网查阅安装过程和配置过程,没有环境,是操作不了数据库的
    有了mysql环境后,第一步进入mysql:输入命令mysql -uroot -p,然后输入配置过程中设置的密码即进入
    进入之后,就可以按照学习的语句进行演示,这里就不多演示了,按照命令照敲就行。
    敲命令的窗口可以使用cmd黑窗口,也可以自己下载一个可视化软件,例如SQLyog(又名小海豚)
    演示一下建表:
    在这里插入图片描述
    如果,你创建好了一张表,但之后还想对表头进行修改,必须改一个字段的名字,或者类型
    使用alter:
    (1)往表中增加一个字段:alter table 表名 add 字段名称 类型;
    (2)删除表中的一个字段:alter table 表名 drop 字段名称;
    (3)修改字段的类型:alter table 表名 modify 旧字段名 新类型;
    (4)修改字段名称:alter table 表名 change 旧字段名 新字段名 新类型;
    (5)修改表名:alter table 旧表名 rename to 新表名;
    这里注意:类型如果是数字,用int表示;如果非数字,用char(),varchar()表示均可,两者的区别是char后面的括号规定了字符的大小,不可改变,而varchar后面的括号规定的是最大字符数,在这个字符大小以内均可,会自动改变,但不能超过最大字符数

  4. DML语句
    之前提过,该语句主要是对表中数据进行增删改三个操作,分别来说:
    增(insert):
    insert into 表名 values(值1,值2,…);给所有字段添加值
    insert into 表名(字段1) values(值1);给字段1添加值,没添值的字段显示null
    例如给上面的表student添加数据
    在这里插入图片描述
    删(delete):
    delete from 表名;删除表中的所有数据
    delete from 表名 where 字段名称=‘字段值’; 根据条件删除表中的这一行数据,如果有多个条件,用and连接,条件有=、!=、<>不等于、>、<、>=、<=、and(&&)、or(||)
    在这里插入图片描述
    改(update):与DDL中的修改Alter不一样
    update 表名 set 字段名称=’新值‘;将该字段这一列所有的值改成新值
    update 表名 set 字段名称=’新值‘ where 字段名称=’字段值‘;带有条件的修改,跟删除的意思一样,也可以带多个条件,这里就不演示了

  5. DCL语句:主要用于对权限的设置
    mysql数据库权限问题:root:拥有所有权限;权限账户,只拥有部分权限(CURD),比如操作一张表
    分配权限账户:GRANT 权限 ON 数据库名.某张表名 TO ‘用户名’@‘localhost’ IDENTIFIED BY ‘123456’;
    例如:GRANT SELECT ON mydb.employee TO ‘eric’@‘localhost’ IDENTIFIED BY ‘123456’;
    注意如分配多个权限,用逗号隔开
    修改数据库密码:UPDATE USER SET PASSWORD=PASSWORD(‘123456’) WHERE USER=‘root’;
    删除用户eric:Delete FROM user Where User=‘eric’ and Host=‘localhost’;

  6. DQL语句(重点)
    查询表中的所有数据:select * from 表名;
    查询个别字段的值:select 字段1,字段2,… from 表名;
    条件查询where:=、!=、<>不等于、<、<=、>、>=;
    between…and; 在什么范围之间
    IN();当括号中有多个字段满足时
    is null;为空 is not null; 不为空
    group up:对结果进行查询
    having:分组后的行条件
    单表查询:
    简单举几个例子,其他类似:
    在这里插入图片描述
    模糊查询:like
    其中 _ 匹配单个任意字符,%匹配多个任意字符;
    举个例子:
    在这里插入图片描述
    聚合函数:
    包括count()、max()、min()、avg()、sum(),分别代表求个数,最大值,最小值,平均值,以及求和;另外,如果想要给展示的个别字段起别名,可以使用as,但并没有改数据库表里的字段名
    例如:
    在这里插入图片描述
    分组查询: GROUP BY 字段名;
    例如:
    1.使用座落地点对所有的部门进行分组;
    SELECT * FROM department GROUP BY location;
    在这里插入图片描述
    2.找出从事人数多于两个的工种
    SELECT job FROM works_on GROUP BY job HAVING COUNT()>2;
    在这里插入图片描述
    注意:where和having的区别,where是在分组之前对条件进行筛选,不符合条件不参与分组,having是对分组之后得到的结果进行筛选
    分页查询: limit
    例如:
    总表:
    在这里插入图片描述
    要查询第一页的数据,每页展示3条:SELECT * FROM works_on LIMIT 0,3;
    在这里插入图片描述
    第二页:SELECT * FROM works_on LIMIT 3,3;
    在这里插入图片描述
    第三页:SELECT * FROM works_on LIMIT 6,3;
    在这里插入图片描述
    第四页:SELECT * FROM works_on LIMIT 9,3;(不够就不展示)
    在这里插入图片描述
    多表查询: 将多张表联合起来查询
    多表查询主要是确定两表之间的关联,这是多表查询的关键,而没有关联的联合查询,只是简单的将多张表列数相加,行数相乘得到数据,没有意义,这种查询称为笛卡尔积
    多表查询的分类:内连接,外连接,子查询
    内连接: 格式1:显示的内连接:select a.
    ,b.* from a[inner] join b on ab的关联条件
    格式2:隐式的内连接:select a.,b. from a,b where ab的关联条件
    外连接: 左外连接:select a.,b. from a leftp[outer] join b on 关联条件;outer可以不写
    意思是先展示join左边的表a的所有数据,在展示符合条件的b表的数据,不符合展示null
    右外连接:select a.,b. from b right[outer] join a on 关联条件
    意思是先展示join右边的表a的所有数据,在展示符合条件的b表的数据,不符合展示null
    子查询: 一个查询依赖另一个查询
    例如:获取为项目Gemini工作的所有职员的编号和所从事的工种
    SELECT emp_no,job FROM works_on WHERE project_no=(SELECT project_no FROM project WHERE project_name=‘Gemini’);
    在这里插入图片描述
    多表查询是最常见的查询,在工作中也很少存在简单的单表查询,所以要多加练习多表查询
    博主一般使用子查询,感觉会比较直接,编写起来不会乱,当然聪明的人啥都会!!!
    学习了子查询之后还有一种自连接查询,它是将一张表看成两张表,然后联合两张表来实现查询,看成两张表后,也就跟子查询的查询过程是一样的
    举个例子:查询emp表中 员工姓名 所对应的 老板姓名
    select e.ename as 员工姓名,b.ename as 老板姓名 from emp e,emp b where e.mgr=b.empno;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!