一 创建数据库和表
1.创建数据库dbname,若存在则先删除
drop database if exists dbname;
create database dbname;
2.查看数据库是否创建成功
show databases;
3.选中特定数据库后,再创建表
use database;
create table table_name(
id int(10) not null unique primary key,
uname varchar(28) not null;
sex varchar(4)
);
4.复制旧表表结构,来创建新表
1)like用法,专门复制表结构的方法,
但是它只复制表的结构和相关属性比如包括存储引擎、备注、主键、索引等,并不复制数据
create table 新表 like 旧表;
2)select用法,只是执行了一个select查询语句,不包括表属性和数据
create table 新表 as select * from 旧表 where 1=2;
5.复制旧表的结构和数据,创建新表
create table 新表 as select * from 旧表;
6.复制旧表的部分结构,创建新表,不包括数据
create table 新表 as select 字段名1,字段名2 from 旧表 where 1<>1;
二 修改表字段
对已存在的表结构进行修改,比如添加、删除表字段用alter,添加的字段默认位置在最后
1.使用 ADD 子句来向数据表中添加列,如下实例在表 istester 中添加 istester6 字段,并定义数据类型:
alter table 表名 add 表字段 属性;
alter table istester add istester6 varchar(100) not null;
若想指定新添加的字段位置,可以使用first(放在首位),after 字段名(在指定字段名之后)
alter table istester add istester7 first;
alter table istester add istester8 after id;
2.使用了 ALTER 命令及 DROP 子句来删除以上创建表的 istester6 字段:
alter table 表名 drop 表字段;
alter table istester drop istester6;
当表只有一个字段时无法执行drop操作来删除字段
3. 如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
例如,把字段istester6 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:
ALTER TABLE testalter_tbl MODIFY istester6 CHAR(10);
ALTER TABLE testalter_tbl CHANGE column_name1column_name2 BIGINT;
ALTER TABLE testalter_tbl CHANGEcolumn_name1 column_name1INT;
4.修改表名
如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。
尝试以下实例将数据表 table_name_A 重命名为 table_name_B:
ALTER TABLE table_name_A RENAME TO table_name_B;
5.查看当前表结构,有两种写法
show columns from tabel_name;
desc tabel_name;
三 更新表数据
修改表中的数据时可以使用
update table_name set 字段名=新值 where 条件
四 插入数据
语法
insert into tablename (filed1,filed2,filed3……)
values
(value1,value2,value3……),(value1,value2,value3……)……;
注意:若字段类型是字符型,则需要在使用单引号或者双引号,比如 “value1”
1 给表中的部分字段插入数据
添加数据的时候可以规定列进行添加。
insert into tablename (filed1,filed2) values (value1,value2);
如果添加过主键自增(PRINARY KEY AUTO_INCREMENT)第一列在增加数据的时候,可以写为0或者null,这样添加数据可以自增
2 给表中所有字段插入数据
如果所有的列都要添加数据可以不规定列进行添加数据,即不需要写出列名
insert into tablename values (value1,value2);
若添加过主键自增(PRINARY KEY AUTO_INCREMENT),则可以在指定字段和字段值中都省略,如
表 idoxu 主键id 配置了递增,插入记录的sql可以这么写:
insert into idoxu (stu_id,c_name,grade) values (11,"idoxu",90),(12,"lin",100);
执行后,id字段会从0递增
3 将表A的数据插到表B中
insert into B(filed1,filed2) select value1,value2 from A;
五 查询数据
语法
select column_name1,column_name2 from table_name [where Clause] [LIMIT N] [ OFFSET M];
limit子句
1. LIMIT 属性来设定返回的记录数N
LIMIT[起始条目索引,],条目数
起始条目索引从0开始
select * from tablename limIt N;
等同于
select * from tablename limit 0,N;
查询出表中从第N条到第M条的记录,其中N为开始的位置,从原始记录中从0开始计算,M为要取出的条数
select * from tablename limit N,M;
比如select * from idoxu limit 2,3; 取得数据是从第三行到第五行
若想查询出从第N条记录到表结束的记录来,如下其中的999,代表着一个较大的数值,可根据实际情况改变
select * from table_name limit N-1,999;
LIMIT 条目数 OFFSET 起始条目索引
起始条目索引从0开始
若想查询出某表中从第三行到第五行的数据可用
select * from table_name limit 3 offset 2;
等同于select * from table_name limit 2,3;
SELECT* FROM表名LIMIT3,1;#从第4条数据开始取数,取1条数据,即只取第四条
SELECT * FROM表名LIMIT1OFFSET3;#从第4条数据开始取数,取1条数据,即只取第四条
SELECT * FROM表名LIMIT3,2;#从第4条数据开始取数,取2条数据,即取第4条,第5条
SELECT * FROM表名LIMIT2OFFSET3;#从第4条数据开始取数,取2条数据,即取第4条,第5条
2.sql函数
count()函数
count(*) 函数返回表中的记录数
count(字段名) 函数返回指定列的值的数目(NULL 不计入)
count(distinct 字段名 ) 函数返回指定列的不同值的数目(字段去重后统计该字段值的数目)
2.内连接
关键字:inner join on
语句:select * from a_table a inner join b_table b on a.a_id = b.b_id;
说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。
3.左连接
关键字:left join on / left outer join on
语句:SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id;
说明: left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
4.右连接
关键字:right join on / right outer join on
语句:SELECT * FROM a_table a right outer join b_table b on a.a_id = b.b_id;
说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。
5.全连接
关键字:union /union all
语句:(select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB )
或 (select colum1,colum2...columN from tableA ) union all (select colum1,colum2...columN from tableB );
union语句注意事项:
1.通过union连接的SQL它们分别单独取出的列数必须相同;
2.不要求合并的表列名称相同时,以第一个sql 表列名为准;
3.使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;
4.被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;
(select id,name from A order by id) union all (select id,name from B order by id); //没有排序效果
(select id,name from A ) union all (select id,name from B ) order by id; //有排序效果
摘自 https://blog.csdn.net/zjt980452483/article/details/82945663
六 删除表数据
delete from table_name;
truncate table table_name;
清除表中的数据有两种方法,两者的区别:
1.delete 可以删除部分数据,而truncate只能删除所有数据,
2.delete可事务回滚,而truncate不行
3.在主键自动增加的字段中,若用truncate删除了表数据,则重新插入后,主键还是从1开始,而用delete删除后,会从上次删除数据的最大值+1开始
七 删除表
drop table table_name;
八 删除数据库
drop database db_name;
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.