不会吧,真的有人还不会SQL语句吗?

一、建表语句

1.1格式

create table if not exists 表名(
字段1 数据类型(宽度) 约束条件,
字段2 数据类型(宽度) 约束条件,
.
.
.
)

1.2建表语句——约束语句

not null   非空
default    默认约束语句
unique    唯一约束语句
primary  主键  = 唯一 + 非空
auto_increment  自动增长
foreign key(从表id) references 主表名(id):添加外键
 主表: 被引用的表。从表 :引用外键的表

1.3项目练习

create table if not exists stuInfo(
stu_Name varchar(10) not null,
stu_No varchar(10) not null primary key,
stu_Sex varchar(2) not null default '男',
stu_Age int(3) not null,
stu_Seat int(5) not null auto_increment,
stu_Address varchar(20) not null default '地址不详',
key(stu_Seat)
)

1.4注意事项

 1.最后一条语句不需要逗号
 2.自增字段如果不是主键的话会被提示报错,解决方法:在最下面一行添加key(自增字段)

二、插入语句

2.1格式

Insert into 表名 (字段1,字段2) values(字段1的值,字段2的值);

2.2项目练习

insert into stuMarks values('E2005070001','s25301',80,58)
insert into stuMarks(exam_No,stu_No,written_Exam)values('E2005070002','s25302',50)
insert into stuMarks values('E2005070003','s25303',97,82)

2.3注意事项

1.不指定列名的时候,需要列出所有字段的值,包括自增列,不然是会报错的
2.没插入值的列取默认值

三、查询语句

3.1格式

sql查询语句格式是: select [列名] from [表名] where [条件] 

3.2项目练习——简单查询

1.查询表中的所有记录。检查数据插入是否正确。
   select * from stuinfo
   
2.查询所有男学员的名单
select * from stuinfo where stu_Sex = '男'

3.查询笔试成绩优秀的学员情况(75-100之间),显示学号、笔试成绩   
select stu_No,written_Exam from stumarks where written_Exam between 70 and 100

3.3项目练习——复杂查询

1.查询关联表的内容:

语法格式:select 查询字段 from 表1 [inner] join 表2 on 表1.关系字段= 表2.关系字段;
练习:查询参加本次考试的学员成绩,包括学员姓名、笔试成绩及机试成绩
select stu_Name,written_Exam,lab_Exam from stuinfo inner join stumarks on stuinfo.stu_No=stumarks.stu_No

2.Mysql中的avg函数

语法格式:
1,AVG()函数是求平均值的函数;
eg:求张三的平均分
SELECT stuName,AVG(score) FROM t_grade WHERE stuName="张三";
2,与 GOUPE BY 关键字一起使用;
eg:根据姓名对每个人求平均分
select stuName,avg(score) from t_grade group by stuName;
项目练习:
1.统计笔试考试平均分和机试考试平均分
select avg(written_Exam)'笔试平均分',avg(lab_Exam)'机试平均分' from stumarks
2.查询学员成绩、显示学号、笔试成绩、机试成绩及平均分
select stu_No'学号',written_Exam'笔试成绩',lab_Exam'机试成绩',avg((written_Exam+lab_Exam)/2)'平均成绩' from stumarks group by stu_No 分组会出现所有学生,不分组只会出现一个学生 不分组的话是对平均值的列再求平均值,

3.Mysql中的count()函数

统计参加本次考试的学员人数
select count(exam_No)'考试人数' from stumarks

4.Mysql中的sum()函数:

查询学员成绩、显示学号、笔试成绩、机试成绩及平均分
select stu_No'学号',written_Exam'笔试成绩',lab_Exam'机试成绩',sum(written_Exam+lab_Exam)'总成绩' from stumarks group by stu_No 分组会出现所有学生

5.Mysql中的order by

1.排名次(按平均分从高到低排序),显示学号和平均分
select stu_No,avg((written_Exam+lab_Exam)/2) as avg_score from stumarks group by stu_No order by avg_score desc 默认升序 desc降序
2.排名次(按平均分从高到低排序),显示姓名、笔试成绩、机试成绩和平均分
select stu_Name,written_Exam,lab_Exam,avg((written_Exam+lab_Exam)/2) as avg_score from stuinfo inner join stumarks on stuinfo.stu_No=stumarks.stu_No group by stuinfo.stu_No order by avg_score

6.Mysql中的limit

1.查询第一行记录:
select   *   from   table  limit   1
2.查询第n行到第m行记录
 select * from table1  limit n-1,m-n;

 SELECT * FROM table LIMIT 5,10;返回第6行到第15行的记录

 select * from employee limit 3,1; // 返回第4行
3.查询前n行记录
  select * from table1 limit 0,n;
或
  select * from table1 limit n;
 4、查询后n行记录
  select * from table1 order by id desc dlimit n;//倒序排序,取前n行 id为自增形式
 5、查询一条记录($id)的下一条记录
 select * from table1 where id>$id  order by id asc dlimit 1
 6、查询一条记录($id)的上一条记录
 select * from table1 where id<$id  order by id desc dlimit 1
项目练习:根据平均分显示前两名信息,包括姓名、笔试成绩、机试成绩、平均分。
select stu_Name,written_Exam,lab_Exam,avg((written_Exam+lab_Exam)/2) as avg_score from stuinfo inner join stumarks on stuinfo.stu_No=stumarks.stu_No group by stuinfo.stu_No order by avg_score desc limit 2

总结
注意事项:

1.ORDER BY子句的位置  在给出ORDER BY子句时,应该保证它 位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY 之后。使用子句的次序不对将产生错误消息

おすすめ

転載: blog.csdn.net/qq_45791799/article/details/108357303