日期:2014-05-16  浏览次数:20637 次

数据库前四章之总结

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

一、首先是创建数据库, 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