MySQL
在使用数据库之前,先要知道有哪些SQL语句
-
SQL:结构化查询语言,是一种规范,所有关系型数据库都遵循这个规范,但各家数据库允许存在差异,这种差异叫做方言
-
SQL语句具体分为四部分:
(1)DDL(Data Definition Language):数据定义语言,主要操作对象是库,表,如建库,删库等
(2)DML(Data Manipulation Language):数据操作语言,主要对表中数据进行增删改操作
(3)DCL(Data Control Language):数据控制语言,主要对数据库的一些权限的设置
(4)DQL(Data Query Language):数据查询语言,主要对表中的数据进行查询(重点) -
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后面的括号规定的是最大字符数,在这个字符大小以内均可,会自动改变,但不能超过最大字符数 -
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 字段名称=’字段值‘;带有条件的修改,跟删除的意思一样,也可以带多个条件,这里就不演示了 -
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’; -
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;
来源:CSDN
作者:weiii_
链接:https://blog.csdn.net/weiii_/article/details/103508106