数据库前四章之总结

今天我把前四章的数据库操作总体写下来,总的概括就是建、查、改、删四个要点;

一、首先是创建数据库, create database 数据库名;

查看所有数据库 show databases;

显示创建数据库的定义信息:show create database 库名

其次修改数据库,但只能修改其参数
alter database 库名 character set gb2312 collate gb2312_chinese_ci;

最后删除数据库
drop database 库名;
如果不知道自己是否删除了某个库:drop database if exists 库名;

二、数据库下面是建表
首先注明是哪一个库:use 库名;
创建表
create table 表名 (
字段名 数据类型 not null(不能为空) primary key(主键);
。。。。。。
);
例:use mybusy;
create table xs(
学号 char(6),
姓名 varchar(8),
年龄 int(2),
性别 char(2)
index ind_name(name)
);
这个是新学的索引,在创建表的时候可以直接创建索引;
这就创建好了一个表,
如果文字不能识别,必须改一下默认的参数,由utf8 改为gb2312;
set character_set_client=gb2312;
set character_set_results=gb2312;
查看表 数据 : desc 表名;

修改表结构
alter table 表名;
add 字段名 类型(宽度) 增加字段
modify 旧字段 类型 修改旧字段
drop 字段名 删除字段

修改表名
Rename table 旧名 to 新名
复制表
create table 表名 like 表名1

删除表
drop table 表名;

三、插入表记录
insert into 表名 values (记录。。。。。);
例如:insert into xs values('0001','张三',20,'男');

查询表记录:select * from 表名;//查看表的所有数据;
也可以查询表的单个数据
select 学号,姓名 from xs;
还可以给列加标题
select 学号 as 新学号, 姓名 from xs;

case 语句: 替换查询中的结果;
select 学号,姓名,case
when 性别=1 then '男'
when 性别=0 then '女'
end as 性别
from xs;

还可以 计算 列
select 学号,姓名,成绩+10 as 新成绩 from xs;
(给xs表的成绩列加了10分,改成新成绩);

where子句
查看不是1990年出生的学生的姓名;
select 姓名 from xs
where 出生日期<'1990-01-01' or 出生日期>'1990-12-31';

select 姓名 from xs
where not(出生日期>='1990-01-01' and 出生日期<='1990-12-31');

select 姓名 from xs
where 成绩<80 and 成绩>60;
还有between子句 :select 姓名 from xs
where 成绩between 60 and 80;
还有not between,与刚才相反;

查看产地是广州,上海,北京的产品信息
一般形式:select * from product
where 产地='广州' or 产地='上海' or 产地='北京';
in子句: 产地 in ('广州','上海','北京')
查看关键字与列表中的任何一个值匹配,就返回true

not in: 产地 not in ('广州','上海','北京')

模糊查询 匹配符:% _

%:任意多个任意字符
_:任意单个字符

like运算符

查询姓李的学生

select 姓名 from xs
where 姓名 like '李%';

distinct去掉重复的行:select distinct 专业名 from xs;

order by 子句:
升序:asc (默认)
降序:desc

imit子句:限制结果集中的行数

一般limit子句放在select语句的最后
limit 3 :表示返回结果集的前面3条记录
limit 2,5:表示返回从第3行开始的5条记录

having 与where的区别:where是对原始记录进行挑选,跟在from后。
select * from 表名
where 条件(满足的条件)
group by 字段名(按字段名进行分组)
having 条件(对分组后的记录进行挑选)
order by 字段名(升序:asc (默认)降序:desc)//如果是按多个字段排序,先按第一个字段排,当第一个字段的值相同时,在按第二个排。
limit 数字(返回查看的前几行)

查询平均分是大于77的课程号,和相应的平均分。

select 课程号,avg(成绩) as 平均分
from xs_kc
group by 课程号
having avg(成绩)>77;

查询选修了2门课程以上的学生学号。

select 学号
from xs_kc
group by 学号
having count(*)>2;

聚合函数:
count(*):统计记录的条数
count(字段名):统计字段中有值的记录个数。(不考虑null)
count(distinct 字段名): 去掉重复值后在计算有值的个数

max(字段名):计算某一列最大值
min(字段名):计算某一列最小值

sum(字段名):求和
avg(字段名):求平均值


统计xs表中的记录数:select count(*) from xs

查询选修了课程的学生人数
select count(distinct 学号) as 人数 from xs_kc;

查询选修101课程的学生的最高分

select max(成绩) as 最高分 from xs_kc
where 课程号=101;

多表查询:
join连接:内连接 外连接

from 表1 inner join 表2
on 表1.字段=表2.字段
inner join 表3 on 条件


子查询:
不相关的子查询:内层查询执行一次,内层查询的结果是外层查询的条件
如果内层查询的结果是单值:=
如果内层查询的结果是多值:in any all
相关的子查询:[not]exists: 内层查询执行多次,

创建视图

create [or replace] view 视图名称[(字段名,。。。)]
as
select语句

创建一个视图,包含女生的学号,姓名,年龄
create or replace view v_student_nv1(id,姓名,年龄)
as
select 学号,姓名,2012-year(出生日期)
from xs
where 性别=0;


create or replace view cs_kc
as
select xs.学号,姓名,课程号,成绩
from xs,xs_kc
where xs.学号=xs_kc.学号 and 成绩>80
with check option;


修改视图的定义
alter view 旧视图名
as
select.....

drop view 视图名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值