mysql语法笔记


1:创建数据库

create database mydb1;

create database mydb2 character set utf8;

2:查看所有数据库

show databases;

3:创建数据表

create table user(

Id int,

name varchar(20),

password char(20),

birthday date,

salary float,

resume text(200) );

4:查看所有数据表

show tables;

5:显示表的结构

desc table_name

6:删除表语句

drop table table_name

7:启动数据库服务

service mysqld start

8:登录MySQL

mysql –u root -p

9:备份与恢复

备份数据:

mysqldump –u 用户名 –p 数据库名>文件名.sql

mysqldump –u root -p db_hr>db_hr.sql

恢复数据:

mysql –u 用户名 –p 数据库名<文件名.sql

mysql – u root -p db_hr1 <db_hr.sql

Source /TEST/文件名.sql

source /test/db_hr.sql

10:Insert插入语句

Insert into account (id,name,password) value (1,’tom’,’123456’);

insert into account (id,name,password) values (1,’tom’,’123456’),(2,’jeck’,’654321’);

11:Update修改语句

格式:Update tableA set columnA=新值A,columnB=新值B where 条件

例子:Update account set name=’mike’ where id =2;(只更新id=2对应的信息的name值为mike )

Update employee set salary=salary+500;(更新所有工资都加500)

12:Delete删除语句

格式1:Delete from 表名;删除表中所有数据

例子1:Delete from test;

格式2:Delete from 表名 where 字段条件

例子2:Delete from test where id =1;

例子2:Delete from test where name=‘tester’;

13:select查询语句

Select * from tableA;查询tableA表中所有字段对应的数据

Select name,math from student;查询student表中name,math2个字段对应的数据

查询英语分数在85-95之间的同学相关信息。

select * from student where english>=85 and english<=95;

select * from student where english between 85 and 95;

查询数学分数为84,90,91的同学。

select * from student where math in(84,90,91);

查询所有姓何的学生成绩。

select * from student where name like ‘何%’;

查询数学分>85,语文分>90的同学。

select * from student where math>85 and chinese>90;

14:合计函数

函数-count(Count(列名)返回行的总数)

统计总分大于260的人数有多少

select count(*) from student where math+chinese+english>260;

函数-SUM(求和)

统计一个班级总成绩?

select sum(math+chinese+english)from student;

统计一个班级语文、英语、数学各科的总成绩

select sum(math),sum(chinese),sum(english) from student;

函数-AVG(求平均值)

求一个班级总分平均分

select avg (math+chinese+english) from student;

函数-MAX/MIN(列的最大/最小值)

求数学最高分

Select max(math)from student;

求数学最低分

Select min(math)from student;

Group by 分组函数

按班分组查出总分,最高分

select class_id,sum(math+chinese+english),max(math+chinese+english) from student group by class_id;

查询出student中学员姓名,班级以及班级数学最高分;

select name,class,math FROM (SELECT * FROM student ORDER BY math DESC) AS a GROUP BY class;

备注:因为查询分组group by 的特性是分组 并取各组第一条查询到的数据信息

(a和b是第一组,如果a排前面,那么就分组就拿a的那条信息,如果是b则拿b的信息),

我们单纯进行分组能查到各分组的最高分,但是不一定能相应查询到对应的最高分的姓名、班级等信息。

所以,先将全部数据进行降序排列,然后班级分组(group by class)确保mysql查询中各班的最高分那条记录是首先查到的(这点很重要)!

原则1:聚合函数可以跟分组字段一起出现在select语句后面;

举例: SELECT class,MAX(math) FROM student GROUP BY class ;

原则2:使用分组函数group by,则select语句后面的字段只能是聚合函数+分组字段;

举例: SELECT class,name, MAX(math) FROM student GROUP BY class ,name;

原则3:group by 分组后的数据过滤,只能使用having;

举例: SELECT grade,MAX(age) FROM student GROUP BY grade HAVING MAX(age)>60;

where和having的区别:

where 子句的作用是对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚合函数,使用where条件过滤出特定的行。

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

order by 排序函数 –Asc升序、Desc降序

按数学成绩从低到高排序

Select * from student order by math asc;

按数学成绩从高到低排序

Select * from student order by math desc;

Distinct剔除重复数据

select DISTINCT english from student;

Select DISTINCT english,math from student;

(distinct对其后面的全部列都有效,也就是只有全部列都重复才会去除
其中只要有一列不重复都不会去除)

15:多表联合查询(内连接和外连接)

内连接:inner join

把两个表中对应的数据查出来(即把2个表中的交集部分查询出来,或是说把2个表中有相对应部分的数据查询出来)

语法一:select * from biao1 inner join biao2 on biao1.aa=biao2.bb;

语法二:select * from biao1 , biao2 where biao1.aa=biao2.bb;

备注:aa,bb字段分别为biao1与biao2中存储的相同字段内容,即aa,bb字段存储的内容相同,代表同一属性值

三张表或是更多表的连接语句

select * from biao1 inner join biao2 on biao1.aa=biao2.bb inner join biao3 on biao2.cc=biao3.dd;

select * from biao1,biao2,biao3 where biao1.aa=biao2.bb and biao2.cc=biao3.dd;

外连接:left join/right join

以某个表为基础把另外表中对应数据查出来。

比如说:

左外连接(left join):即是以左边表为基础,同时把右边的表中和左边表中有相对应的部分数据一起展示出来;select * from biao1 left join biao2 on biao1.aa=biao2.bb;

右外连接(right join):即是以右边表为基础,同时把左边的表中和右边表中有相对应的部分的数据一起展示出来;select * from biao1 right join biao2 on biao1.aa=biao2.bb;

16:子查询

子查询是将一个查询语句嵌套在另一个查询语句中,把一个查询语句的查询结果,作为外层查询语句的条件。

select * from score where score.CN in (select ID from SC where KC=‘软件测试’);

查询出在课程表中有选过‘软件测试’课程的学员的考试成绩信息。

思路:先从课程表SC中查询出选修过‘软件测试’课程的学员编号信息,然后当做学员成绩表score中的子条件进行查询。

备注:SC为课程表(ID:为学员编号,KC:选课课程);score为学员成绩表(CN:学员编号)。

———————————————————————————————————————————————————

更新和查询同时使用原则:

不能在同一语句中更新select出的同一张表元组的属性值

解决方法:将select出的结果通过中间表再select一遍即可。

即对同一张表查的同时更新会引起数据不一致,但是将查询结果事先放到临时表中就不会有这个问题了。

通俗点说:对同一个表数据进行查询的时候,又对这个表数据进行更新操作会有问题

例如:删除stu_2表中数学成绩相同的学员相关信息

DELETE FROM stu_2 WHERE math IN (SELECT math FROM (SELECT math ,COUNT(math) FROM stu_2 GROUP BY math HAVING COUNT(math)>1) AS stu_3)

思路:首先得查出stu_2表中有哪些人的数学成绩是重复的,先按照数学成绩进行分组,count(math)>1求出每个组中有多少个分数相同的组员,大于1表示数学成绩重复。

然后使用子查询,查出出数学成绩在分组中重复组中的数学成绩信息。然后按照条件过滤进行删除。

备注:对同一个表进行数据查询又进行数据删除,语法上执行不通过,需要把查询的数据临时生存一个新表,这样就有效回避了对同一表进行查询和更新操作引起的数据不同步

17:快速删除表数据方法

Delete from table (删除表数据可以回滚)

Truncate table tablename (最高效,删除表数据不能回滚)

18:MySQL查询版本号的方式

Select version();

Mysql -V

19:mysql 退出方式

\q , exit, quit

一:数据库编码类型与设置编码的方式

设置编码的几种方式:设置数据表编码类型、设置数据库编码类型、设置数据库全局编码类型。查看系统可用的编码类型:SHOW VARIABLES LIKE ‘%char%’;

展示结果可以可看到character_set_database 与 character_set_server 不同,且分别为utf8 与latin1,这是出现乱码的原因。


解决方法:

1:修改/etc/my.cnf文件文件,添加如下内容:

[mysql]
default-character-set=utf8
[mysqld]
character_set_server =utf8
[client]
default-character-set =utf8

2:重新加载配置文件:source /etc/my.cnf

3:重启MySQL服务:service mysqld restart

二:修改客户端表的编码格式:sqlyog, navicat等

alter table tablename convert to character set utf8

后续补充:

20:主外键

21:触发器

22:存储过程

23:索引

24:视图

25:约束


文章作者: 派大星是一个天才
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 派大星是一个天才 !
评论
  目录