1.创建数据库:
CREATEDATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
CHARACTER SET 'character set name' 字符集
COLLATE 'collate name' 排序规则
2.删除数据库
DROPDATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
查看支持所有字符集:SHOW CHARACTERSET
3.查看表:SHOW TABLES [FROMdb_name]
4.查看表结构:DESC[db_name.]tb_name
5.删除表:DROP TABLE [IFEXISTS] tb_name
6.查看表创建命令:SHOW CREATE TABLEtbl_name
7.查看表状态:SHOW TABLE STATUSLIKE 'tbl_name’
7.查看库中所有表状态:SHOW TABLESTATUS FROM db_name
8.创建表
CREATETABLE [IF NOT EXISTS] ‘tbl_name’ (col1 type1 修饰符, col2 type2 修饰符,...)
1.直接创建 create tablestudents
例:create table students ( id tinyint unsigned not null primarykey ,name char(10) notnull ,phone char(11),sex char(1) )
2.通过查询现存表创建;新表会被直接插入查询而来的数据
CREATE [TEMPORARY] TABLE[IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options]
[partition_options]select_statement
例:create table user3 select * from user1;
3. 通过复制现存的表的表结构创建,但不复制数据
CREATE[TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKEold_tbl_name) }
例:create table user2 (likeuser1);
9.修改表
ALTER TABLE 'tbl_name'
字段:
添加字段:add
ADD col1 data_type [FIRST|AFTER col_name]
例:alter table s1 add phone varchar(11) aftername;在name字段后面添加phone字段
删除字段:drop
例: alter table s1 drop phone;
修改字段:alter(默认值),change(字段名), modify(字段属性)
添加索引:addindex
删除索引:drop index
查看表上的索引:SHOW INDEXES FROM[db_name.]tbl_name;
示例:
ALTERTABLE students RENAME s1;
ALTERTABLE s1 ADD phone varchar(11) AFTER name;
ALTERTABLE s1 MODIFY phone int;
ALTERTABLE s1 CHANGE COLUMN phone mobile char(11);
ALTERTABLE s1 DROP COLUMN mobile;
HelpALTER TABLE 查看帮助
10.删除表
insert :一次插入一行或多行数据
INSERTtbl_name [(col1,...)] VALUES (val1,...), (val21,...)
--TRUNCATE TABLE tbl_name; 清空表
12.select查询
字段显示可以使用别名:
col1 AS alias1, col2 ASalias2, ...
LIKE:
%:任意长度的任意字符
_:任意单个字符 select * from students where nme like'___' 三个字符
GROUP:根据指定的条件把查询结果进行“分组”以用于做“聚合”运算
avg(), max(), min(),count(), sum()
HAVING:对分组聚合运算后的结果指定过滤条件 代替where;分组前做用where,分组后做用having
例:
1.统计男生女生的 平均成绩
select sex,max(score) as 最好成绩from s1 group by sex; ||一旦分组select后面是分组字段本身和做汇总统计的一些函数
selectsex,avg(score) as 平均成绩from s1group by sex;
2.统计各班男生女生的平均成绩 多重分组
select sex,class,avg(score) from s1 group by sex,classs;
3.统计各班男生女生人数
select sex,class,count(*) as 人数 from s1 group by sex,class;
4.统计表里有多少条记录
select count(id) from s1; count(*)效率不高 建议count里面加个字段。
5.查询各班男生女生的平均成绩大于80分的记录
select sex,class,avg(score) from s1 group by sex,class having avg(score)>80;
ORDER BY: 根据指定的字段对查询结果进行排序
升序:ASC 默认 -可将null植排在前面还是后面 order by -score,只对数字有效,把null放到最后面用desc
降序:DESC
LIMIT[[offset,]row_count]:对查询的结果进行输出行数数量限制
对查询结果中的数据请求施加“锁”
FORUPDATE: 写锁,独占或排它锁,只有一个读和写
LOCKIN SHARE MODE: 读锁,共享锁.
13.内连接:innerjoin两张表取交集 也可多张表取交集
例:查询学生姓名和所对应的讲师姓名
select s.name studentname,t.name teachername from studentss inner join teachers t ons.teacherid=t.tid;
14.自连接:在一张表起两个别名 。自连
15.交叉连接:笛卡尔乘积crossjoin 完全组合一遍
例:
1.select * from students cross jointeachers
16.左外连接:left outer join左边是全部内容,右边是交集
例:查询学生姓名和所对应的讲师姓名,如果没有就空有就显示负责老师姓名。学生表姓名都显示,讲师表只要有交集的地方。
select s.name sname,t.name tname from students s left join teachers t on s.teacherid=t.tid;
17.右外连接:right join
例:查询学生姓名和所对应的讲师姓名,负责老师姓名全显示,学生姓名取交集
18.子查询 查询语句里面嵌套查询语句
例:考试成绩大于平均成绩的姓名和成绩
select s.name,c.score from students as s inner join scores as c ons.stuid=c.stuid where c.score>(select avg(score) from scores);
19.联合查询 union 连接两张表完全连接 竖着连接
例:SELECT Name,Age FROM students UNION SELECT Name,Age FROM teachers;
20.视图:保存表的查询结果实现快速查询,不存放数据相当于别名,利用视图可把磁盘上保存数据的物理结构隐藏起来给用户看逻辑结构
创建方法:
CREATEVIEW view_name [(column_list)]
ASselect_statement
[WITH[CASCADED | LOCAL] CHECK OPTION]
21.查看视图定义:SHOW CREATE VIEWview_name
22.删除视图:
DROPVIEW [IF EXISTS]
view_name[, view_name] ...
[RESTRICT| CASCADE]
视图中的数据事实上存储于“基表”中,因此,其修改操作也会针对基表实现;其修改操作受基表限制
例:create view view_students as select stuid,name from students
select * from view_students
--区别视图和表的命令操作
show tables status like 'view_students'\G --COMMENT:VIEW 查看表的详细状态信息