SQL操作
一、基本命令
-
添加数据到数据库表
语法:insert into 表名 (列名) values (值); #注意事项: a.插入数据时不允许插入半行或几列 b.不能为自增列插入数据(mysql不会报错) c.值的个数、类型要与列保持一致 d.缺省值的列使用default代替(设置了默认值的列插入数据时要用default关键字代替) e.插入数据不允许违反约束 f.多个列或者多个值之间用英文的逗号进行分隔 g.没有自增的情况下,前面的列名是可以省略不写的
-
一次性插入多条数据
语法: insert into 表名 (列名) values (值列表),(值列表)...
-
将源表中的数据复制到新表中(新表必须要提前创建且新表的列和源表保持一致)
语法: insert into 新表名 (字段1,字段2..) select 字符1,字段2 .. from 原表名;
-
将源表中的数据复制到新表中(新表不需要提前创建)
语法: create table 新表名 (select 字段1,字段2.. from 原表);
-
更新数据
语法: update 表名 set 列1 = 值1,列2 = 值2... where 更新条件
-
删除数据
语法: delete from 表名 where 删除条件 #注意: #有主外键关联关系的两张表,删除数据时先删除子表中的数据,再删除主表中的数据
-
截断表
语法: truncate table 表名 #截断表会将数据库表中所有数据删除,且事务也无法恢复,慎用!
-
delete 删除表中数据和truncate 截断表的区别?
a. truncate在使用时,不能加where条件,但是delete在使用时可以加where条件 b. truncate在使用时,速度更快且不回滚事务,删除的数据无法恢复,delete 在使用时,删除的数据是可以恢复的 c. truncate 只能对表进行操作,delete 可以操作表或者视图 d. truncate执行完毕后,不会记录到事务日志中,但是delete 删除数据后会记录到事务日志中 e.在没有备份数据库表的情况下,不管是删除表中数据,或者是截断表中数据,都要慎用。
-
MySQL中的运算符
a.赋值运算符 = b.算术运算符 + - * / % c.逻辑运算符 and 并且 or 或者 not 非 d.比较运算符 > < >= <= <>不等于
-
查询表中全部数据
语法: select * from 表名; #实际项目中,尽量避免使用 * 对表进行全表扫描
-
查询部分列
语法: select 列1,列2.. from 表名;
-
where条件查询
语法: select 列 from 表名 [where 查询条件] 通常跟运算符组合使用
-
排序
语法: select 列 from 表名 [where 查询条件] [order by 排序的列 asc | desc] # asc:升序(默认不写) # desc:降序
-
分组查询
语法: select 列 from 表名 [where 查询条件] [group by 分组的列] # 分组查询只可以查询被分组的列和函数
-
对分组后的数据进行过滤筛选
语法: select 列 from 表名 [where 查询条件] [group by 分组的列] [having 筛选过滤条件] # having只能用在分组之后
-
in查询(通常代替 or 这个关键字)
语法: select 列 from 表名 [where 列 in (值1,值2..)]
-
between and 筛选数据
语法: select 列 from 表名 [where 列 between 值1 and 值2] # 值1~值2 只能从小到大,反之则查询不出任何结果
-
Like模糊查询(通常和通配符配合使用)
语法: select 列 from 表名 [where 列 like '表达式'] # %:匹配任意多个字符 # _:匹配单个字符
-
查询为null 或者 不为null
语法: select 列 from 表名 [where 列 is null] select 列 from 表名 [where 列 is not null]
-
分页查询
语法: select 列 from 表名 [limit 起始行下标,页面大小] # 起始行下标 = (当前页码-1)* 页面大小;
-
五个常用的聚合函数
count(1):统计数量 avg(字段):统计平均值 sum(字段):求和 max(字段):最大值 min(字段):最小值
-
表连接(四种)
语法: select 列 from A inner join B on A.列 = B.列; #内连接 select 列 from A,B where A.列 = B.列 #等值连接 select 列 from A left join B on A.列 = B.列; #左外连接 √ select 列 from A right join B on A.列 = B.列; #右外连接 # 内连接:匹配两张表中相关联匹配的数据 # 左外连接:主表的数据全部匹配,子表只会匹配跟主表关联的数据,没有关联的数据显示null
-
SQL优化
1.尽量避免使用子查询 2.查询数据时用in 代替 or 3.获取记录数时尽量使用count(1)而不要使用count(*) 4.查询哪列指定哪列,尽量避免使用 * 5.减少不必要的排序,排序会消耗CPU的性能,影响SQL的响应时间 6.尽量用表连接代替子查询 7.尽量早过滤(能用where关键字筛选数据尽量先用where) 8.避免类型转换 9.大批量的数据查询时建议添加索引 10.能使用between and 的情况下尽量使用 11.模糊查询时,like不建议使用但又无法避免,能用单%情况下,不建议使用双%