MySQL

您所在的位置:网站首页 存储管理有哪几个基本功能 MySQL

MySQL

#MySQL| 来源: 网络整理| 查看: 265

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

desc + table_name

mysql> desc dept; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | DEPTNO | int(2) | NO | PRI | NULL | | 部门编号 | DNAME | varchar(14) | YES | | NULL | | 部门名称 | LOC | varchar(13) | YES | | NULL | | 部门位置 +--------+-------------+------+-----+---------+-------+ 简单查看表中数据 简答查询

语法格式: select 字段名1,字段名2,字段名3,.... from 表名;

提示: 1、任何一条sql语句以“;”结尾。 2、sql语句不区分大小写。

给查询结果的列重命名

as关键字,as 关键字可以省略

select ename,sal * 12 as yearsal from emp; 查询所有字段

select * from table_name;

实际开发中不建议使用*,效率较低。

mysql> select * from dept; +--------+------------+----------+ | DEPTNO | DNAME | LOC | +--------+------------+----------+ | 10 | ACCOUNTING | NEW YORK | | 20 | RESEARCH | DALLAS | | 30 | SALES | CHICAGO | | 40 | OPERATIONS | BOSTON | +--------+------------+----------+ 条件查询

语法格式: select 字段,字段... from 表名 where 条件;

执行顺序:先from,然后where,最后select

模糊查询

模糊查询使用关键字like 在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_ %代表任意多个字符,_代表任意1个字符。

示例 找出名字当中含有O的? (在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_) %代表任意多个字符,_代表任意1个字符。 select ename from emp where ename like '%O%'; +-------+ | ename | +-------+ | JONES | | SCOTT | | FORD | +-------+ 找出名字中第二个字母是A的? select ename from emp where ename like '_A%'; +--------+ | ename | +--------+ | WARD | | MARTIN | | JAMES | +--------+ 找出名字中有下划线的? mysql> select * from t_user; +------+----------+ | id | name | +------+----------+ | 1 | zhangsan | | 2 | lisi | | 3 | WANG_WU | +------+----------+ select name from t_user where name like '%_%'; +----------+ | name | +----------+ | zhangsan | | lisi | | WANG_WU | +----------+ select name from t_user where name like '%\_%'; +---------+ | name | +---------+ | WANG_WU | +---------+ 找出名字中最后一个字母是T的? select ename from emp where ename like '%T'; +-------+ | ename | +-------+ | SCOTT | +-------+ 结果集去重

distinct关键字

mysql> select distinct job from emp; // distinct关键字去除重复记录。 +-----------+ | job | +-----------+ | CLERK | | SALESMAN | | MANAGER | | ANALYST | | PRESIDENT | +-----------+ mysql> select ename,distinct job from emp; 以上的sql语句是错误的。 记住:distinct只能出现在所有字段的最前面。 排序

关键字order by

MySQL中默认是升序。asc表示升序,desc表示降序

语法格式 select ... from 表名 order by ... 执行顺序 select 字段 3 from 表名 1 where 条件 2 order by .... 4 order by是最后执行的。 查看当前 数据库与版本号 mysql> select database(); 查看当前使用的是哪个数据库 +-------------+ | database() | +-------------+ | swu | +-------------+ mysql> select version(); 查看mysql的版本号。 +-----------+ | version() | +-----------+ | 8.0.28 | +-----------+ 分组函数

分组函数又称多行处理函数,输入多行,最终输出的结果是1行

count 计数 sum 求和 avg 平均值 max 最大值 min 最小值

所有的分组函数都是对“某一组”数据进行操作

注意

分组函数自动忽略NULL

where中不能直接使用 select ename,sal from emp where sal > avg(sal); //ERROR 1111 (HY000): Invalid use of group function

思考以上的错误信息:无效的使用了分组函数? 原因:SQL语句当中有一个语法规则,分组函数不可直接使用在where子句当中

我们用序号来表示执行的先后顺序

因为group by是在where执行之后才会执行的 select 5 .. from 1 .. where 2 .. group by 3 .. having 4 .. order by 6 .. count(*)和count(字段)的区别 count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关) count(comm): 表示统计comm字段中不为NULL的数据总数量 group by and having

group by : 按照某个字段或者某些字段进行分组。 having : having是对分组之后的数据进行再次过滤

案例:找出每个工作岗位的最高薪资

select max(sal),job from emp group by job; +----------+-----------+ | max(sal) | job | +----------+-----------+ | 3000.00 | ANALYST | | 1300.00 | CLERK | | 2975.00 | MANAGER | | 5000.00 | PRESIDENT | | 1600.00 | SALESMAN | +----------+-----------+

注意:

分组函数一般都会和group by联合使用,这也是为什么它被称为分组函数的原因。 并且任何一个分组函数(count sum avg max min)都是在group by语句执行结束之后才会执行的。 当一条sql语句没有group by的话,整张表的数据会自成一组。 select ename,max(sal),job from emp group by job; 以上在mysql当中,查询结果是有的,但是结果没有意义,在Oracle数据库当中会报错。语法错误。

Oracle的语法规则比MySQL语法规则严谨。 记住一个规则:当一条语句中有group by的话,select后面只能跟分组函数和参与分组的字段。

完整DQL语句写法

数字代表执行顺序

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

insert语句

语法格式:

insert into 表名(字段名1,字段名2,字段名3,....) values(值1,值2,值3,....)

要求:字段的数量和值的数量相同,并且数据类型要对应相同

注意:

当一条insert语句执行成功之后,表格当中必然会多一行记录。 即使多的这一行记录当中某些字段是NULL,后期也没有办法在执行 insert语句插入数据了,只能使用update进行更新。 一次插入多行数据 insert into t_student(no,name,sex,classno,birth) values (3,'rose','1','1101','1952-12-14'), (4,'jack','1','1201','1955-12-14'); 查询结果插入表 mysql> insert into dept1 select * from dept; mysql> select * from dept1; +--------+------------+----------+ | DEPTNO | DNAME | LOC | +--------+------------+----------+ | 10 | ACCOUNTING | NEW YORK | | 20 | RESEARCH | DALLAS | | 30 | SALES | CHICAGO | | 40 | OPERATIONS | BOSTON | | 10 | ACCOUNTING | NEW YORK | | 20 | RESEARCH | DALLAS | | 30 | SALES | CHICAGO | | 40 | OPERATIONS | BOSTON | +--------+------------+----------+ 表的复制

语法: create table 表名 as select语句; 将查询结果当做表创建出来

update语句

语法格式:

update 表名 set 字段名1=值1,字段名2=值2... where 条件;

案例

将部门10的LOC修改为SHANGHAI,将部门名称修改为RENSHIBU update dept1 set loc = 'SHANGHAI', dname = 'RENSHIBU' where deptno = 10; mysql> select * from dept1; +--------+------------+----------+ | DEPTNO | DNAME | LOC | +--------+------------+----------+ | 10 | RENSHIBU | SHANGHAI | | 20 | RESEARCH | DALLAS | | 30 | SALES | CHICAGO | | 40 | OPERATIONS | BOSTON | | 10 | RENSHIBU | SHANGHAI | | 20 | RESEARCH | DALLAS | | 30 | SALES | CHICAGO | | 40 | OPERATIONS | BOSTON | +--------+------------+----------+ 更新所有记录 update dept1 set loc = 'x', dname = 'y'; mysql> select * from dept1; +--------+-------+------+ | DEPTNO | DNAME | LOC | +--------+-------+------+ | 10 | y | x | | 20 | y | x | | 30 | y | x | | 40 | y | x | | 10 | y | x | | 20 | y | x | | 30 | y | x | | 40 | y | x | +--------+-------+------+ delete语句

语法格式:

delete from 表名 where 条件;

注意:没有where设置条件,表中的数据将会被全部删除

如何快速删除大数据量的表

在实际开发过程中,一张表可能有成千上万条记录,此时执行delete语句往往需要十多分钟,我们可以直接使用truncate截断表数据,速度在瞬间完成。

truncate table 表名 警告

表被截断,不可回滚,数据永久丢失

关于删库跑路的一点看法 新闻

首先我们来看两条新闻

百度 95 后程序员删库跑路被判刑,动机是工作变动及对领导不满 (baidu.com) 程序员离职当天“删库跑路”,后果很严重,法院判了 (baidu.com) 观点

个人认为删库跑路的程序员不负责任,没有担当意识,“删库跑路”这种行为类似与小孩子发脾气,并且违反了相关法律法规,对自己和公司都造成了严重伤害,可以说是杀敌一千,自损一万。

赔钱事小,蹲监狱事大。

更何况还是删除数据库,给公司带来极大损失,相信以后没有公司还敢再聘用这类程序员。

一时的冲动导致编程生涯的结束,可惜。

我们还是要遵守法律法规,心有不满,可以多和领导多交流,多沟通。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3