常用基础命令(有些语句分号是中文的,不可以直接复制粘贴)
use 库名//1.打开指定的数据库
show databases;//2.查看当前所有数据库
show tables;//3.查看当前数据库的所有表
show tables from 库名;//4.查看其他数据库的所有表
creat table 表名(
列名 列类型,
列名 列类型,
.......
);//5.创建表 不能用index作索引
desc 表名;//6.查看表信息
DDL(表的操作)
Alter table 表名 add 列名 列类型; //增加列
Alter table 表名 modify 列名 列类型; //改列类型
Alter table 表名 drop 列名; //删列
Rename table 旧表名 to 新表名; //重命名表
show create table 表名;//查看表细节
Alter table 表名 character set gbk;//改表的字符集;
Alter table 表名 change;// 旧列名 新列名 列类型;
drop table 表名;//删除表
DML(对表中数据操作)//注意,字符串类型要加单引号
select * from 表名;//查询表中所有数据
insert into 表名 (列名,列名) values(1,'xx'); //插入一行数据
update 表名 set 列名 = 值;//修改列值
updata 表名 set 列名 = 值 where name = 行名;//修改行列值
update 表名 set 列名 = 值,列名 = 值 where name = 行名;//修改某行的多列值
删除操作
delete from 表名 where name = 值;//删除表中name属性为该值的记录
delete from 表名 ;//删除表中所有记录
truncate table 表名;//删表再建,表中数据清空
DQL(查询)
select 列名 from 表名 where 行条件 Group By grouping_columns
having 分组条件
Order by 排序依据;//完整查询
select * from 表名//查所有列
select 列名 form 表名;
2,条件查询
= <>(不等于,在 SQL 的一些版本中,该操作符可被写成 !=) < <= > >=
between ...and
in(set)
is null
and
or
not
3模糊查询 like
通配符 _ 代表任意一个字符 %任意一个字符串
select * from 表名 where 列名 like '_i';//查询该列由两个字符构成且第二个字符为i的记录
4字符控制查询
select distinct 列名 from 表名;// 去除重复记录;
select * ,列名 + ifnull(列名,0)as total form 表名;//查询两列之和并在total暂时列名下显示
5排序asc(升序) desc(降序)
select * form 表名 order by age Asc //查询表中所有记录,按年龄升序排序
6聚合函数(纵向运算)
count();//统计指定列不为null的行数
max()计算指定列的最大值
min()计算指定列的最小值
sum()计算指定列的数值和,若不是数值类型,则为0
AVG()计算指定列的平均值
select count(*)as notNullRow from 表名;//查询表中不全为空的行并在notNullRow下显示
7分组查询
select 列名,count(*)from 表名 where 列名>1500 group by 组名;//查询该列大于1500的行并放到该组中
select 列名1,sum(列名2) from 表名 group by 列名 having sum(列名2)> 9000;//查询列名2大于九千的行的列名一属性;
8limit
select * from 表名 limit 0,5;查询5行记录,从0开始;
9主键约束
alter table 表名 add constraint pk_id primary key(列名);
10 自增列
create table 表名(
id int primary key auto_increment,
Name varchar(50)unique
);
11外键约束
create table 表名(
id int primary key,
constraint fk_id foreign key(id) references 外表名(外表列);
);
多表查询//业务开发以多表查询经常用
合并结果集 union
连接查询 内,外(左,右,全)自然
子查询
select * from A union select * form B;//相同的值合并
select * from A union all select * form B;//相同的值不合并
内连接
select * from 1表名 inner join 2表名 2别名 on 1表名.列名 = 2别名.列名;//只能是主外键相匹配,求出的是两表交集
左外连接
select * rom 1表名 left outer join 2表名 2别名 on 1表名.列名 = 2别名.列名;//可以是任意列去匹配,相匹配的行合并 ,1表在左,2表在右,求出的是以左表为标准,右表为附加的结果集,数据条数与左表一致
右外连接与左外连接相反
全外连接数据条数不一定,数据数为两表总数减去内连接条数,
自然连接
select 表1别名.列名 from 表1 表1 别名
full join 表2 表2别名 on 表一别名.列名 = 表2别名.列名;
自然连接
select * from 表1 natural join 表2;//自然连接无需指定连接列,SQL会检查两个表中是否相同名称的列,且假设他们在连接条件中使用,并且在连接条件中仅包含一个连接列。不允许使用ON语句,不允许指定显示列,显示列只能用*表示(ORACLE环境下测试的)。对于每种连接类型(除了交叉连接外),均可指定NATURAL,感觉没多大意义