mySql笔记

零、

select x from y where z

x输出条件: \(\color{#f00}{avg()}\) | \(\color{#f00}{min()}\) | \(\color{#f00}{max()}\) | \(\color{#f00}{sum()}\) | \(\color{#f00}{count()}\)
y表名: group by \(\color{#f00}{ \_ }\)(任意单个字符) | \(\color{#f00}{\%}\)(任意0个或多个字符) | \(\color{#f00}{[]}\)(括号内所列字符中的一个(类似与正则表达式))
z限制条件:




\(\color{#f00}{----}\)

  1. select x from y;x两种命名:... as 命名/命名=... | y的命名 ... a(随便字母) // --具体例子查看sql server 复习的连接查询
  2. 不等于三种形式: not | != | <>
  3. 连接: select ... from a表,b表 where a表.学号=b表.学号 --(where后更多表连接用 and)



一、数据类型

\(\color{#f00}{Int}\) | \(\color{#f00}{Float}\) | \(\color{#f00}{ Varchar(value)/Char }\) | \(\color{#f00}{ Date/dateTime }\)

char varchar
是一种固定长度的类型,char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉) 是一种可变长度的类型,varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).
date dateTime
是SQL Server 2008新引进的数据类型。它表示一个日子,不包含时间部分,可以表示的日期范围从公元元年1月1日到9999年12月31日。只需要3个字节的存储空间 日期和时间部分,可以表示的日期范围从公元1753年1月1日00:00:00.000 到9999年12月31日23:59:59.997 ,精确到3.33 毫秒 ,它需要8个字节的存储空间



二、 order by ... desc/asc

order by score desc/asc                      -- desc(按倒序排序,即:从大到小排序) |  asc(按正序排序,即:从小到大排序)

例:求1号课成绩大于80分的学生的学号及成绩,并按成绩由高到低列出。

select 学号,成绩 from 选课 where 课号="1" and 成绩>80 order by 成绩 desc



三、库

1. 库|表 : create | drop | alter 数据库
create database 数据库名称       --(创建库,如下库名为stuDB)
drop database 数据库名称         --(删除库)
use 数据库名称                   --(打开该库)
例:
create database stuDB
  1. 数据 insert into | delete from | update set | select | distinct(过滤掉多余的重复记录只保留一条,如select distinct 课号 from 必修)



四、表

①. 修改
alter table 表名 add/drop/alter (column) 修改的列 (  字段  数据类型  列的特征 )   --column 为列(sql server 复习——六.1)

修改表结构例子:

  1. 为“课程1”表添加一个开课学期字段,字段类型为数值型,长度为1。
ALTER TABLE 课程1 ADD COLUMN 开课学期 N(1)
  1. 修改开课学期字段为字符型,合法值为1或2。
ALTER TABLE 课程1 ALTER COLUMN 开课学期 C(1) CHECK 开课学期="1" OR 开课学期="2"
  1. 删除“课程1”表中对开课学期字段的合法值约束,设置默认值为1。
ALTER TABLE 课程1 ALTER 开课学期 DROP CHECK
ALTER TABLE 课程1 ALTER 开课学期 SET DEFAULT "1"
  1. 删除“课程1”表中的开课学期字段。修改课程名字段为“课名”字段。
ALTER TABLE 课程1 DROP 开课学期 RENAME 课程名 TO 课名
  1. 在“学生1”表的“年龄”字段上建立候选索引。
ALTER TABLE 学生1 ADD UNIQUE 年龄 TAG 年龄
  1. 在“学生1”表中添加一个出生日期字段,删除年龄字段。
ALTER TABLE 学生1 ADD 出生日期 D  ALTER TABLE 学生1 DROP UNIQUE TAG 年龄 DROP 年龄

②. 创建
create table 表名(
    字段1 数据类型 列的特征,       --列的特征:包括该列是是否为空(NULL)、是否是标识列(自动编号)、是否有默认值、是否为主键等
    字段2 数据类型 列的特征,
)

例子:

create table stuMarks
(
  ExamNo  CHAR(7)  NOT NULL  identity(1,1),    -- 考号 => 自动编号: 从1(第一个1)开始,每次添加的时候,自动加1(第二个1是说每次加1个)
  stuNo  CHAR(6)  NOT NULL  PRIMARY KEY ,      -- 学号 => 主键约束
  writtenExam  INT(3,2)  NOT NULL,             -- 笔试成绩 => INT(3,2)参数2为保留两位小数
  LabExam  INT NULL                            -- 机试成绩 => NULL 允许为空  
)



五、约束(constraint)

主键与唯一: 对一个表来说主键只能一个,且字段不能为空,但唯一性约束可以有好几个,允许字段为空。
alter table   stuInfo
     add constraint PK_stuNo primaty key   ( stuNo )         -- 主键: primary key


alter table   stuInfo
      add constraint   UQ_stuID unique ( stuID )             -- 唯一: unique


alter table   stuInfo
      add constraint   DF_stuAddress
           default (' 地址不详 ') for stuAddress              -- 默认( 约束用于向列中插入默认值 ): default  for


alter table   stuInfo
        add constraint   CK_stuAge
        check ( stuAge between 15 and   40)                  -- 检查( 约束用于限制列中的值的范围 ): check ( ... between ... and ...)


alter table   stuMarks
      add constraint   FK_stuNo          
        foeign key ( stuNo ) references stuInfo ( stuNo )    -- 外键:  foreign key (列名) references  引用外键表(列名)

GO

约束扩展 -- 检查约束 :

age int(3) check age>10 and age<45 error "年龄必须大于10小于45 " ,  --check.  ... and ... error "": error是不在范围内提示的字符串  
默认约束: admissionDate date default {`1991-1-1}  --default:   字符串——""     和当前的时间格式——{`0000-00-00}

外键约束:

create table 部门信息表(
    部门号 char(10) primary key ,
)
create table 员工信息表(
    员工的部门号  char(10) ,                           --另一种方法: 员工的部门号  char(10)   references 部门信息表
    foreign key (员工的部门号) references 部门信息表(部门号)
)

删除约束条件:

alter table   表名        
drop constraint 约束名
例:删除 stuInfo 表中地址 默认约束
        alter tables   stuInfo                                                                                        
        drop constraint   DF_stuAddress




③. 插入数据:
insert into table_name (列1, 列2,...) VALUES (值1, 值2,....)


视图view

inner join...on(内连接——内部连接的INNER短语可以省略)
select * from a inner join b on a.classno=b.classno b inner join c b.class=c.class
例1:

   create view v_student
   as
   SELECT departname FROM Class INNER JOIN Department ON Class.DepartNo = Department.DepartNo INNER JOIN Student ON Class.ClassNo = Student.ClassNo

例2:

超连接
1、列出选修1号课的学生姓名及成绩。
SELECT 姓名,成绩 FROM 学生,选课 WHERE 学生.学号=选课.学号 AND 课号="1"               -- 方法一:(使用简单连接查询格式) 
SELECT 姓名,成绩 FROM 学生 INNER JOIN 选课 ON 学生.学号=选课.学号 WHERE 课号="1"     -- 方法二:(使用内部连接格式) 



T-SQL

declare @in int                                                                    -- declare:声明     int:类型
set @in=(select count(*) as 信息技术类课程数量 from course where kind='信息技术')    -- set:赋值
if @in>0
     begin
     select @in as 信息技术类课程数量                                                -- select:以表格形式输出 ,一条语句时可省略begin和end
     end
else
     print '没有此类课程'                                                            -- prin t:z直接返回结果
检索stucou表中同时选修了001及002课程的学生人数
select @num=count(*) from stucou where couno=‘002 ’  and stuno in (select stuno from stucou where couno=‘001’)

case(11.1)

语文=
  case course.fame
     where '语文' then score



trigger

CREATE TRIGGER UpdateWillNum ON StuCou
FOR INSERT, UPDATE, DELETE
instead of/for
AS
UPDATE Course SET WillNum=(SELECT COUNT(*) FROM StuCou WHERE CouNo=Course.CouNo)

你可能感兴趣的:(mySql笔记)