load data指令
load data infile '文件的绝对路径加文件名' into '数据表名';
将文本文件(后缀名为txt)中的信息按照表的方式来导入进数据库,文本文件中的数据必须和原有创建的表有相同的结构!而且默认分隔符是制表符’\t’当作各个列之间的分割条件。当文本数据不是用制表符作为分割条件时,可以通过load data infile '文件的绝对路径加文件名' into '数据表名'; field terminal by '文本文件中的分割符'
来导入数据。文件路径之间用/分割
这里load data中需要我们开启向MySQL数据库中用文件添加数据的功能。在安装文件的my.ini配置文件中添加secure-file-priv=
表明可以向MySQL数据库中添加任意路径下的文件中数据。
source指令
source 文件绝对路径及文件名;
将文件中的SQL语句导入在MySQL环境中执行。这里的文件路径之间用/分割,该文件后缀名是sql,其文件中的内容必须是合法的SQL语句。
文件编码和操作系统编码需要保持一致。这里的文件路径用\来分割不用转义,也不用’’包括
- 修改表中数据
update table 数据表名 set 列名 = 值;
将表中该列下的所有字段元素都替换为该值
- 修改表信息
alter table 表名 (添加、删除、修改列);
alter table 表名 add 列名 数据类型;
来新增列
alter table 表名 drop 列名 数据类型;
删除列信息
常用SQL语句
- where条件表达式
选择匹配成立的数据
= 表示等值匹配
! 表示不等值匹配
< 小于匹配
> 大于匹配
<= 小于等于匹配
>= 大于等于匹配
当含有多个条件时,可以用条件表达式来连接。
逻辑与 and
逻辑或 or
逻辑非 not
between 整数1 and 整数2 表示选择包括整数1和整数2及其中间包含的数(整数1小于整数2)
列名 in (整数1, 整数2, …整数n) 表示选择整数1到整数n这n个数 - like 模糊查询
列名 like "要查询的字符";
这里的字符中可以使用通配符来查询"_“表示一个任意字符,”%"表示没有或多个任意字符。 - order by 排序(一般用于select查询语句中)
order by 列名 排序方式
按照列名来进行单列排序
order by 整数
通过该整数作为列的索引排序的条件这里的索引是从1开始,这里的索引值不能超过列的个数
排序方式可以是正向排序asc反向排序desc
order by 列名1 排序方式, 列名2 排序方式, ...
按照多种方式来进行排序 ,先按照列1的排序方式排序,当列1有多个重复元素时按照列2进行排序… - limit 选择数量
limit 整数
选择整数个字段
limit 整数1, 整数2
从第下标为整数1开始选择整数2个字段(这里的下标从0开始) - group by 分组
group by 列名
根据该列的值相同的元素分为一组(这里的select中不能直接加*)单列分组
group by 列名1, 列名2...
根据列名1分组,然后分组后的每个列中按照列名2分组…错误!多列分组和group by后的顺序无关!!多列分组时顺序不影响结果(只是左右位置上的差别)
select * from 表名 group by 列名
错误!这种方式应为分组后的个数和*不一样,这样可能造成多种对应关系。
select中的数据只能是group by分组的列的相关信息,可以是count(*)求和信息,max(该列名)该列的最大值,min(该列名)该列的最小值,sum(列名)对该列求和,avg(列名)对该列求平均值。
分组后的select子句中只能出现分组条件列和组函数,当其他列中存在一对多关系的不能出现在select中(可能存在一对多的映射关系)。 - having 过滤(不同于where的是having可以过滤由group by分组后来过滤)
假如在分组时,用where count (*) > 整数
来作为输出条件,会发生错误,因为MySQL中的执行步骤是先执行where再执行group by最后执行having,这样count(*)中不能直接获得相关数据而造成Invalid use of group function
的错误
select count(*) from 表名 group by 列 having count(*) > 整数
正确,这里having中的元素有效
当having和where都可以合法地过滤数据时,我们建议使用用where来过滤,这样减少未来判断的次数来提高查找效率。
多个表的连接
select ... from 表1 inner join 表2 on 连接条件;
将表1的列和表2的值按照一定的规则连接起来一起输出(把两列取值相等的记录联系在一起)这里一般的连接规则是两个列有相同的取值,当两个列名相同时,用表1.列名 = 表2.列名
来区分列。
为了便于处理我们可以给表取别名来方便使用,这里的别名只针对该条语句,不针对表结构。格式表名 表别名
当这里的表1中的列数据在表2中没有与之对应的值,则这种情况不输出。
两张表的记录完全满足连接条件才会出现的结果中。
select ... from 表1 left out join 表2 on 连接条件;
这里的out可以省略,位于连接左侧的表,不管是否连接到了记录(表2中有相对应的值),和内连接一样都会出现在结果中,当没有的连接到的记录,对应的表中显示null
select ... from 表1 right out join 表2 on 连接条件;
这里out可以省略
- 连接查询的另一种写法
内连接的等价写法
select ... from 表1, 表2 where 连接条件;
或
select ... from 表1 inner join 表2 using(列名);
这个是内连接的MySQL独有语法 ,前提是两个表中有相同的列名,且连接关系为两个表的列名值相等