Mysql笔记-sql语句
sql语句的分类
sql-StructuredQueryLanguage结构化查询语言
sql语句有很多,最好进行分门别类,这样更容易记忆
- DQL:
数据查询语言(凡是带有select关键字的都是查询语句)- DML:
数据操作语言(凡是对表当中的数据进行增删改的都是DML)
insert、delete、update- DDL:
数据定义语言(凡是带有create、drop、alter的都是DDL)
DDL主要操作的是表的结构,不是表中的数据
create:新建表
drop:删除表
alter:修改表
也是增删改,只是是针对表结构的- TCL:
事务控制语言
commit:事务提交
rollback:事务回滚等等- DCL:
数据控制语言
grant:授权
revoke:撤销权限等等
怎么将sql文件的数据导入数据库
常用命令:
use 数据库名
source ——文件全路径(根路径)
show tbales ——查看表
select * from 表名 —— 查询表中的数据,*表示所有
如:select * from student 从student表中查看所有数据
desc 表名 ——不看表中的数据,只看表的结构(describe缩写为desc)
所有对表的操作都要在具体的数据库里面
varchar就是Java中的String
select version();——查看当前数据库的版本号
select database ——查看当前使用的是哪个数据库
mysql不见分号不执行,“;”表示结束;\c用来终止一条sql语句命令的输入
DQL语句
简单语句
- 查询一个字段
select 字段名 from 表名;
其中要注意:
select和from都是关键字
字段名和表名都是标识符
如:desc 表名;
select 字段 from 表名;
对于SQL语句来说是通用的
所有的SQL语句以“;”结尾
SQL语句不区分大小写- 查询两个字段或者多个字段,使用“,”隔开
如:selet 字段,字段 from 表名;
- 查询所有字段
*——效率比较低,可读性查,实际开发中建议下面这种方式- 把每个字段都写上——建议使用
- 给查询的列起别名(使用as关键字)
select 字段名 as 别名 from 表名;
注意
只是将显示的查询结果列名显示为别名,原表列名不变
select语句是永远都不会进行修改操作的,只负责查询、检索
as关键字可以省略
假设起别名的时候有别名里有空格——DBMS进行SQL语句的编译,不符合语法,会报错
解决:加‘ ’将别名括起来(用“”也可以…只是不建议使用)
注意
在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了,但是在mysql当中没有影响- 计算
字段可以使用数学表达式
select sal*12 as yearsal from 表名;
别名是一个中文的话要使用‘’括起来- 条件查询 ——筛选
不是将表中的所有数据查出来,是查询出来符合条件的
语法格式:
select
字段1,字段2,字段3…
from
表名
where
条件;都有哪些条件:
1、= 等于。可用于基本数据也可以用于字符串
2、<> 或 != 不等于
3、<=小于等于
4、>=大于等于
5、between … and … 两个值之间,等同于 >= and <=
**注意:**使用between…and…时必须遵循左小右大原则,是闭区间,包括两端的值
6、is null 为 null(is not null不为空)
**注意:**在数据库当中null不能使用等号进行衡量,需要使用is null。因为数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量
7、and 并且
select 字段,字段,字段… from 表名 where 条件 and 条件;
8、or 或者
select 字段,字段,字段… from 表名 where 条件 or 条件;
and和or同时出现有优先级问题——and优先级比or高select a,b from c where a >= 3000 and b=10 or b=20;
以上SQL语句的含义是从c表中找出工资大于3000并且部门编号为10的员工,或者找出部门编号为20的所有员工。
纠正:
a >= 3000 and (b=10 or b=20);
如上所示即为从10和20部门当中找出工资高于3000的员工——小括号的优先级最高,在开发中不确定优先级,使用小括号就行
9、in 包含-相当于多个or(not in 不在包括的范围内)
or表示:
select 字段名,字段名 from 表名 where 条件1 or 条件2;
in表示
select 字段名,字段名 from 表名 where 字段 in(条件,条件);
in不是一个区间,in后面跟的是具体的值
10、not 用于取非(取反),主要用在is或in当中
11、like
称为模糊查询,支持%或下划线匹配
%匹配任意多个字符
下划线_:一个下划线只匹配一个字符,任意一个字符
找出名字当中有o的select name from table where name like '%o%';
以t结尾的
select name from table where name like '%t';
以k开头的
select name from table where name like 'k%';
第二个字母是A的
select name from table where name like '_A%';
等等
******仍然是转义字符
排序
- 查询所有员工工资并排序
select name,sal from table order by sal;//默认是升序
- 降序
select name,sal from table order by sal desc;//降序
指定降序——desc;指定升序——asc- 多个字段排序
查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,再按照名字升序排列
select name,sal from table order by sal asc,name asc;
sal在前起主导,只有sal相等的时候才会考虑启用name排序- 根据字段的位置排序
select name,sal from table order 2;
2表示第2列。第2列是sal,即按照sal排序,了解一下,不建议在开发中使用,不健壮,因为列的顺序会发生修改
综合实例:
找出工资在1250到3000之间的员工信息,要求按照薪资降序排列select name,sal from table where sal between 1250 and 3000 order by sal desc;
关键字顺序不能变,排序总是在最后执行