sql数据库常用指令
创建库
create database 库名
use 库名 //使用某个库
删除库
drop database 库名
创建表 (varchar)
CREATE TABLE table_name (column_name column_type)ENGINE=INNODB DEFAULT CHARSET=utf8
添加数据
insert into 表名(字段1,字段2)values(值1,值2),values('值','值');
查询数据
select * from 表名 //查询表中的所有字段
select 字段名 as 别名,字段名 as 别名 from 表名
关键字
-
auto_increament 自增
-
primary key 主键
-
UNIQUE
-
not null 值不可以为null
-
default 可以设置默认值
-
foreign key … references 表(字段)
-
enum
删除表
DROP TABLE table_name ;
插入数据
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN ), ( value1, value2,...valueN );
动态插入列
alter table 表名 add tel varchar(11)
动态更新列
alter table 表名 modify 列名 数据类型
动态删除列
alter table 表名 drop 列名
动态修改字段名
alter table 表名 change 原字段 新字段 类型
动态 修改表名
rename table 表名 to 新表名;
更新表数据命令
update 表名 set 字段名=值 [where 条件]
筛选
where
操作符 | 描述 |
---|---|
= | 等号,检测两个值是否相等,如果相等返回true |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true |
<= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true |
算数运算
/
-
*
%
+
or,
and
not
is null
is not null
in
not in
修改数据
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
删除数据
DELETE FROM table_name [WHERE Clause]
查询数据
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
like
_ 占位符
% 任意字符
DISTINCT
select DISTINCT cname from class;--distinct去重复的值
ORDER BY
排序 desc
asc :默认
GROUP BY
分组
where....group by 字段 having......
null
select * from class where beizhu is null; --查询null值 使用的是is 关键字
select * from class where beizhu is not null;
limit
limit 起始值 ,每页记录
select * from person limit 3,5
多表查询
语法1
select 字段1,字段2... from 表1,表2... [where 条件]
笛卡尔积: A表中数据条数 * B表中数据条数 = 笛卡尔乘积.
语法2
SELECT 字段列表
``FROM 表1 INNER|LEFT|RIGHT JOIN 表2
ON 表1.字段 = 表2.字段;
判断查询 IF关键字,CASE 关键字
语法: IF(条件表达式,"结果为true",'结果为false');
SELECT account.* ,IF(money>18000,'高','低') AS jibie FROM account
语法 case:
SELECT
CASE WHEN STATE = '1' THEN '成功'
WHEN STATE = '2' THEN '失败'
ELSE '其他' END
FROM 表;
子查询
概念: 把一个查询嵌套在另一个查询当中
分类
- 标量子查询:返回单一值的标量,最简单的形式。
- 列子查询:返回的结果集是 N 行一列。
- 行子查询:返回的结果集是一行 N 列。
- 表子查询:返回的结果集是 N 行 N 列。
SELECT * FROM account WHERE (email) IN (SELECT email from s1 where id = 1)
SELECT * FROM account WHERE (account,money) IN (SELECT email,NAME FROM s1)
优化
-
使用连接(JOIN)来代替子查询
SELECT * FROM t1 WHERE t1.a1 NOT ``in` `(SELECT a2 FROM t2 ) 优化后: SELECT * FROM t1 LEFT JOIN t2 ON t1.a1=t2.a2 WHERE t2.a2 IS NULL