码迷,mamicode.com
首页 > 数据库 > 详细

mySql数据库基础

时间:2018-08-29 22:19:19      阅读:756      评论:0      收藏:0      [点我收藏+]

标签:exists   视图   完整   acl   let   微软   RoCE   全局变量   c中   

SQL 结构化查询语言。
MySQL 数据库管理系统。
SQL Server 微软的数据库管理系统。
Oracle(甲骨文) 数据管理系统。


show databases; 显示数据库管理系统中所有数据库
create database 数据库名; 创建数据库。
drop database 数据库名; 删除数据库。
use 数据库名; 使用指定数据库。

在创建数据库的过程中可以指定编码语言和校对规则。
ISO 8859-1
gbk gb2312 都是简体中文编码。
big5 繁体编码集。
utf8 比较全面的一个编码集。支持大多数编码格式。

了解if exists 以及 if not exists 从句的含义。
了解编码集 以及 校对规则的含义。
掌握使用navicat 创建数据库的方式。


3月14日

了解:
alter 修改 其实对数据库我们修改的只有编码集和校对 alert 警告
timestamp 时间戳
掌握:
show tables;
yyyy-mm-dd hh:mm:ss
yyyy 年份 mm 月份 dd 日期
hh 小时 mm 分 ss 秒

3月19日


课堂目标:
完成创建简单的 table 以及 数据的插入处理。

创建表: create table 表名(列名 类型,……);
创建表的最简单的语法。

desc 表名
查看表的结构。

select * from 表名;
查询表中的所有的内容。

在任意的数据表中,
每一个有效行都描述了一个完整的对象。

insert into 表名 values(值……);


select name from stuinfo;
select age from stuinfo;
select name,age from stuinfo;
select * from stuinfo;


4月2日
1、查询 xs_kc表中 成绩大于75的同学的 学号 和成绩?

成绩>75 条件 where 成绩>75
查询的 是不是 学号 和 成绩 满足我要求的条件。


select 学号,成绩 from xs_kc where 成绩>75

2、我想找到成绩最高的同学的学号?

select 学号 from xs_kc where 成绩= max(成绩);
本条语句的错误是因为 max函数的使用语法不对

正确的写法为:
select 学号 from xs_kc where 成绩=
(select MAX(成绩) from xs_kc)
练习:查询到成绩最低的同学的学号 ?

3、我想查询一下成绩在平均分以上的同学的学号和成绩?

条件: 成绩在平均分以上。
查询结果为:学号、成绩。

聚合函数: max() min() avg() count()(此函数在所有的管理系统的登录过程中必用!)

select 学号,成绩 from xs_kc where 成绩>
(select avg(成绩) from xs_kc)

4、我想查询一下 课程编号为 101的 分数 大于平均分的 同学的 学号和成绩

5、between and
我想查询一下成绩 大于 60 小于 70的学号和成绩.
select 学号,成绩 from xs_kc where 成绩>60 and 成绩<70

select 学号,成绩 from xs_kc where 成绩 between 60 and 70

6、SQL 查询语句的书写的规律。
结果:
条件:
7、我想查询成绩最高的同学的姓名和分数?

结果:xs表中姓名 xs_kc中的分数
中期结果 : 成绩最高的同学的学号
条件: 成绩最高

查询的结果来自几张表?
目前是两张,xs.姓名 xs_kc.分数

8、笛卡尔积 n*m

9、查询 最高成绩的同学的姓名,成绩

select 姓名,max(xs_kc.`成绩`) from xs,xs_kc where xs.学号=
(
SELECT 学号 from xs_kc where `成绩`=
(select MAX(成绩) from xs_kc)
)
10、简单的介绍count 函数的使用
count(主键名) 如果没有主键 再使用count(*) 进行查询

查询一下学号为081102 姓名为 王林的同学是否存在
select COUNT(学号) from xs WHERE
学号=‘081102‘ and 姓名=‘王林‘

2018年4月4日

1、查询XS表中各个同学的姓名、专业名、总学分。

2、查询XS表中计算机系同学的学号、姓名、和总学分,结果中各列的标题分别指定为
number、name、mark。

select 姓名 as name,学号 as number ,总学分 as mark from xs
where 专业名=‘计算机‘

条件查询 以及 列名的显示


3、查询XS表中计算机系各同学的学号,姓名和总学分,对其总学分按照以下规则进行替换,
若总学分为空 替换为 尚未选课
总学分小于50,替换为不合格
总学分在50和52之间替换为合格
大于52 替换为优秀。
列标题替换为 等级。

select 学号,姓名,
CASE
when 总学分 is NULL then ‘尚未选课‘
WHEN 总学分 <50 then ‘不合格‘
WHEN 总学分 >=50 and 总学分<=52 then ‘合格‘
WHEN 总学分 >52 then ‘优秀‘
END AS 等级
from xs
where `专业名`=‘计算机‘

4、按120 分计算成绩,显示 xs_kc表中学号为081101的学生课程信息

结果:课程信息
条件:学号为081101
SELECT 学号,课程号,FLOOR(`成绩`*1.2)
as 成绩,学分 from xs_kc
where 学号=‘081101‘

5、查询XS表中的专业名和总学分 并且消灭重复行
distinct 关键字用于消灭结果集中的重复记录。
6、求学生的总人数?
结果:人数
7、统计备注不为空的学生的数目。
结果:数目
条件:备注不为空
select COUNT(学号) as 总人数 from xs
where 备注 is not null

8、统计总学分在50分以上的同学的人数。
select COUNT(学号) as 总人数 from xs
where 总学分>50

9、查询选修101课程的学生的最高分和最低分。
min() ,max()
10、求学号081101的学生所学课程的总成绩
select SUM(成绩) as 总成绩 from xs_kc where 学号=‘081101‘
11、求选修101课程的学生的平均成绩
select AVG(成绩) from xs_kc WHERE 课程号=101
12、查询XS 表中学号为 081101的学生的情况
select * from xs where 学号=‘081101‘

13、查询XS表中总学分大于50 的情况

select * from xs where 总学分>50

14、查询表中备注为空的学生的情况
select * from xs where 备注 is null

15、查询表中专业为计算机,性别为女(0) 的同学的情况
select * from xs where 专业名=‘计算机‘ and 性别=0
16、查询XS_KC表中102 和 206 课程中大于80分的同学的记录?
select * from xs_kc where `成绩`>80 and 课程号 in (102,206)
17、查询xs表中姓“王”的学生的学号,姓名及性别
使用的关键字是“like” 和 “like”
配合使用的通配符是“%”(任意长度)“_”(一个长度)
select 学号,姓名,性别 from xs where 姓名 like ‘王%‘;
18、查询xs表中姓“王”且名字为3个字的学生的学号,姓名及性别
select 学号,姓名,性别 from xs where 姓名 like ‘王__‘;
19、查询XS表中学号倒数第二个数字为0的学生的学号姓名及专业名。
select 学号,姓名,专业名 from xs where 学号 LIKE ‘%0_‘
20、查询xs表中名字包含下划线的学生学号和姓名?

select 学号,姓名 from xs where 姓名 LIKE ‘\_‘

//这个明天搞
21、查询XS表中不在1989年出生的同学的情况

select 学号,姓名,专业名,出生时间 from xs
where 出生时间 >‘1989-12-31‘ or 出生时间<‘1989-01-01‘
date类型的数据是可以比较大小的。

select 学号,姓名,专业名,出生时间 from xs
where 出生时间 not LIKE ‘1989%‘

like关键字可以应用于date类型的列。


22、查询表中专业名为"计算机" 、"通信工程"的学生的情况

select * from xs where 专业名=‘计算机‘ or 专业名=‘通信工程‘
select * from xs where 专业名 in (‘计算机‘,‘通信工程‘)
23、查询 XS中 学分尚不确定的学生的情况

select * from xs where
备注 LIKE ‘%待补考%‘

24、查询所有学生选过的课程名和课程号。
结果:课程名和课程号
条件:选过的。

select kc.课程名,kc.课程号 from kc where kc.课程号 in
(select DISTINCT xs_kc.课程号 from xs_kc)

select DISTINCT kc.课程名,kc.课程号 from

kc,xs_kc
where kc.`课程号`=xs_kc.`课程号`

25、查找选修了 计算机基础课程 且成绩在80分以上的学生学号 姓名 课程名(计算机基础课程) 成绩。
select xs.`学号`,xs.`姓名`,xs_kc.`成绩`,kc.`课程名`
from xs INNER JOIN xs_kc ON xs.`学号`=xs_kc.`学号`
INNER JOIN kc ON xs_kc.`课程号`=kc.`课程号` AND kc.`课程名`=‘计算机基础‘
AND xs_kc.`成绩`>80

26、查找选修了 计算机基础课程 且成绩在80分以上的学生学号 姓名 课程名(所有课程), 成绩。

select xs.`学号`,xs.`姓名`,kc.`课程名`,xs_kc.`成绩` FROM
xs INNER JOIN xs_kc on xs.`学号` in
(select DISTINCT xs_kc.`学号`from xs_kc inner JOIN kc ON xs_kc.`成绩`>80 AND
kc.`课程名`=‘计算机基础‘)
INNER JOIN kc ON xs_kc.`课程号`=kc.`课程号`

27、查找课程不同,但是成绩相同的学生的学号和课程号以及成绩。
在同一表中查询三个field。
条件:成绩相同。
如果两张表中存在一个 主外键 关系 可以 a.field = b.field
如果只是从一张表中查,那么 我们必须将这一张表看成是 两张表。

select DISTINCT a.学号,a.课程号,a.成绩 from xs_kc a,xs_kc b
where a.`课程号`!=b.`课程号` and a.`成绩`=b.`成绩`

28、查找所有学生的情况及他们选修的课程号、若学生未选修任何课程,也要包括其情况

29、查找 KC表中所有被学生选过的课的课程名
怎么才能知道是否被选过 ?
xs_kc 表中出现的课程号,才证明选过

select DISTINCT kc.`课程名` from kc , xs_kc where
kc.`课程号`=xs_kc.`课程号`

SELECT DISTINCT kc.`课程名` from kc INNER JOIN xs_kc
on kc.`课程号`=xs_kc.`课程号`

30、查找被选修了的课程的选修情况和所有开设的课程名

选修情况?
有多少人选了课程

SELECT COUNT(xs_kc.`学号`) as 人数,xs_kc.`课程号`,kc.`课程名`

from xs_kc RIGHT JOIN kc on xs_kc.`课程号`=kc.`课程号`

GROUP BY kc.`课程号`


31.查找未选修离散数学的学生的姓名、学号和专业名
SELECT xs.`学号`,xs.`姓名`,xs.`专业名` from xs
where xs.`学号` not in
(
select xs_kc.`学号` from xs_kc WHERE xs_kc.`课程号` =
(SELECT kc.`课程号` from kc where kc.`课程名`=‘离散数学‘)
)

32.查找选修了离散数学的学生学号
select xs_kc.`学号` from xs_kc WHERE xs_kc.`课程号` =
(SELECT kc.`课程号` from kc where kc.`课程名`=‘离散数学‘)

33.查找XS表中比所有计算机系的学生年龄都大的学生的学号、姓名、专业名和出生日期
SELECT xs.`出生时间` from xs where xs.`出生时间`<
(
select min(出生时间) from xs where xs.`专业名`=‘计算机‘
)


SELECT xs.`出生时间` from xs where xs.`出生时间`<
all
(
select 出生时间 from xs where xs.`专业名`=‘计算机‘
)

34.查找XS_KC表中课程号206的课程成绩不低于课程号101的最低成绩的学生的学号

select xs_kc.`学号` from xs_kc WHERE xs_kc.`成绩`>=
any
(
SELECT 成绩 from xs_kc where xs_kc.`课程号`=101
)
AND xs_kc.`课程号`=206

35.查找选修206号课程的学生姓名
select xs.`姓名` from xs INNER JOIN xs_kc
on xs.`学号`=xs_kc.`学号`
where xs_kc.`课程号`=206

36.将XS中各专业名输出

37.求XS中各专业的学生数

38.求被选修的各门课程的平均成绩和选修该课程的人数

select xs_kc.`课程号`,kc.`课程名`,COUNT(学号),AVG(成绩) from xs_kc
INNER JOIN kc ON kc.`课程号`=xs_kc.`课程号`
GROUP BY `课程号`

39.在XSCJ数据库上产生一个结果集,包括每个专业的男生人数、女生人数、总人数以及学生总人数
SELECT COUNT(学号) as 女生人数,专业名 from xs
where 性别 =0 GROUP BY 专业名;

SELECT COUNT(学号) as 男生人数,专业名 from xs
where 性别 =1 group by 专业名;

SELECT COUNT(学号) as 专业总人数, 专业名 from xs group by 专业名;

SELECT COUNT(学号) as 总人数 from xs;

40.查找平均成绩在85分以上的学生的姓名,学号和平均成绩
SELECT xs_kc.`学号`,AVG(xs_kc.`成绩`) ,xs.`姓名`
from xs_kc
INNER JOIN xs on xs_kc.`学号`=xs.`学号`
GROUP BY xs_kc.`学号` having AVG(xs_kc.`成绩`)>85


41.查找选修课程超过2门且成绩都在80分以上的学生的学号,姓名
SELECT xs_kc.`学号`,xs.`姓名`
from xs_kc
INNER JOIN xs
on xs.`学号`=xs_kc.`学号`
GROUP BY xs_kc.`学号`
HAVING MIN(成绩)>80
AND COUNT(xs_kc.`课程号`) >2

42.将通信工程专业的学生按出生日期先后排序
select * from xs where 专业名=‘通信工程‘
ORDER BY `出生时间` ASC

43.将计算机专业学生的“计算机基础”课程成绩,姓名,学号按降序排列
SELECT xs_kc.`成绩`,xs.`姓名`,xs.`学号` from xs_kc INNER JOIN xs
ON xs.`学号`=xs_kc.`学号`
INNER JOIN kc ON kc.`课程号`=xs_kc.`课程号`
where kc.`课程名`=‘计算机基础‘ AND
xs.`专业名`=‘计算机‘
ORDER BY xs_kc.`成绩` DESC

44.将计算机专业学生按其平均成绩排列
SELECT AVG(成绩) from xs_kc INNER JOIN
xs on xs.`学号`=xs_kc.`学号`
where xs.`专业名`=‘计算机‘ GROUP BY xs_kc.`学号`
ORDER BY AVG(成绩)

45.查找XS表中学号最靠前的5位学生的信息
SELECT xs.* from xs
ORDER BY 学号 LIMIT 0,5;

46.查找XS表中从第4位同学开始的5位学生的信息


查询数据库 select 所查的列名 from 表名 where 条件
插入数据库 insert into 表名 values 数值
删除数据库 delete from 表名 where 条件
修改数据库 update 表名 set 数字 where 数值

视图
create view v_xs
as SELECT xs.`学号`,xs.`姓名`,xs.`出生时间` from xs
with check option 创建视图

drop view 视图名 删除视图

create or replace view v_xs
as SELECT xs.`学号`,xs.`姓名`,xs.`出生时间` from xs
with check option 修改视图

show full tables 显示视图和表

alter view v_gameinfo as
select gameid,gamename from gameinfo 更改视图

视图是一种虚表
视图是以存储的查询

索引是什么?
理解 索引其实就是类似于目录
索引的作用都是 提高查询的效率

什么是约束?
规则 index
primary key 主键约束 不能重复,并且不能为null,表示当前行与其他行的区别。
unique 唯一约束
index
fulltext
set autocommit=0
start transaction;
select * from gameinfo
delete frim gameinfo
select * from gameinfo
rollback
set autocommit=1

show index from class

create index index_xs on xs(姓名(2) desc); 创建索引
-- index 索引的作用就是提高一下查询的效率。


show index from xs 显示索引


-- create index index_xs on xs(姓名(2) desc);
-- index 索引的作用就是提高一下查询的效率。
-- show index from xs
create unique index unique_xs on xs(姓名);
-- 确保当前列中的内容与其他行中内容不同
insert into xs(xs.`学号`,xs.`姓名`,xs.)

alter table xs
add unique index unique_xs (姓名)
删除是使用 drop 关键字。

适合创建索引的列一般情况下都出现再条件语句中。
短索引的使用。
关于事物的概念
举个例子:去银行办理一张银行卡 从进门开始 对于银行来说你这个业务就开始了。
整个办理业务的过程,就称值为“事物”。

原子性(不可分隔)
一致性(结果一致)
隔离性(对于用户来说,业务单独办理)
持续性(作用的时间是一个长的时间段)
一组语句被称作事物
事物的提交有两种方式,一个是显示提交 一个是隐式提交
关闭自动提交的指令
set autocommit=0
start transaction

savepoint p

rollback to SAVEPOINT p
-- 回滚到指定的保存点。
rollback
-- 回滚 (我反悔了)
commit
-- 提交(我确定这件事这样了)
-- set autocommit=1


数据库编程

1、我们所操作的数据,代表什么含义?
信息
信息或者说代表信息的数据必须要有容器去装载。
装载数据的容器就是常量或者变量。
2、MySQQL 种常量分为数值型,字符型,日期型,布尔型。
3、在MySQL种的赋值操作格式(全局变量):
1) set @变量名=‘xxxx‘
2) select @变量名:=‘xxxx‘
4、在局部变量中 变量的赋值可以使用select into 语句。
注意 存出过程的创建方式。可以在前文创建一个全局变量@name

 

set @name="王林";

select @name;

select * from xs where xs.`姓名`=@name;

select @pai:=(@pai:=3.14)+2

create PROCEDURE p01()
BEGIN
DECLARE myname varchar(8) DEFAULT ‘长信学生‘
-- 声明一个局部变量 myname 默认值为 长信学生
set @name= myname;
end;

call p01();

5、调用系统变量的方式,某些系统变量的使用可以不用"@@"

条件控制语句

if语句
create PROCEDURE p02()
BEGIN
set @a=80;
if @a>60 then select ‘及格‘;
else select ‘不及格‘;

end if;
END


drop PROCEDURE p02
call p02();

select @a

 

===============================================================
create PROCEDURE p02()
BEGIN
set @a=80;
set @b=‘成绩‘;
if @a>60 then set @b=‘及格‘;
else set @b=‘不及格‘;
end if;
END


drop PROCEDURE p02
call p02();

select @b

==================================================================
create PROCEDURE p02()
BEGIN
set @a=70;
set @b=‘成绩‘;
if @a>80 then set @b=‘优秀‘;
elseif @a>60 then set @b=‘及格‘;
else set @b=‘不及格‘;
end if;
END


drop PROCEDURE p02
call p02();

select @b
===================================================================
create PROCEDURE p02()
BEGIN
case
when @a>59 then select ‘及格‘;
else select ‘不及格‘;
end case;
END


drop PROCEDURE p02
call p02();


====================================================================
drop procedure p01

create procedure p01()
BEGIN

declare sum int default 0;
declare i int default 1;
while i<10 DO
set sum=sum+i;
set i=i+1;
end while;
select sum;
END

call p01();
select @a
===================================================================
drop procedure p01

create procedure p01()
BEGIN
declare sum int default 0;
declare i int default 1;
add_sum:while true do
set sum=sum+i;
set i=i+1;
if(i=101) then
leave add_sum;
end if;
end while add_sum;
select sum;
END

call p01();
==================================================================
drop procedure p01

create procedure p01()
BEGIN
declare sum int default 0;
declare i int default 1;
add_sum:while true do
set i=i+1;
if(i=101) then
leave add_sum;
end if;
if(i%2!=0) then
iterate add_sum;
end if;
set sum=sum+i;
end while add_sum;
select sum;
END

call p01();

mySql数据库基础

标签:exists   视图   完整   acl   let   微软   RoCE   全局变量   c中   

原文地址:https://www.cnblogs.com/wym-1999/p/9557236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!