MySQL中的loaddata、source及其更改、删除表中字段分组、排序等SQL语
句、表连接
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来过滤,这样减少未来判断的次数来提⾼查效率。
mysql删除重复的数据保留一条多个表的连接
将表1的列和表2的值按照⼀定的规则连接起来⼀起输出(把两列取值相等的记录联系在⼀起)这⾥⼀般的连接规则是两个列有相同的取值,当两个列名相同时,⽤表1.列名 = 表2.列名来区分列。
为了便于处理我们可以给表取别名来⽅便使⽤,这⾥的别名只针对该条语句,不针对表结构。格式表名表别名
当这⾥的表1中的列数据在表2中没有与之对应的值,则这种情况不输出。
两张表的记录完全满⾜连接条件才会出现的结果中。
这⾥的out可以省略,位于连接左侧的表,不管是否连接到了记录(表2中有相对应的值),和内连接⼀样都会出现在结果中,当没有的连接到的记录,对应的表中显⽰null
这⾥out可以省略
连接查询的另⼀种写法
内连接的等价写法
这个是内连接的MySQL独有语法 ,前提是两个表中有相同的列名,且连接关系为两个表的列名值相等