分享

SQL数据库基本操作语句(张扬课堂笔记)

 一戒745zia4sgs 2015-10-22
一、数据库概述
    1、什么是数据库
        存储数据的仓库,并且可以管理和维护。
    2、数据库的分类
        层次结构
        网状结构
        关系型结构
    3、常用关系型数据库
        Oracle(后面有课程学习,在企业中用的较多)
        DB2
        Informix
        Sybase
        SQL Server
        ProstgreSQL面向对象数据库
        MySQL(我们主要学习它,在企业中用的较多)
        Access
        SQLite等

二、SQL简介
    1、什么是SQL
        结构化查询语言  Structured  Query Language
        是一种定义和操作数据库的语法,绝大多数关系型数据库都支持。
    2、SQL的作用
        与数据库建立联系,进行沟通
    3、SQL的标准
        ANSI制定的一个:SQL-2003标准
    4、SQL的组成
        数据定义语言  DDL    ***
        数据操作语言  DML    *****
        数据查询语言  DQL    *****
        事务控制语言  TPL
        数据控制语言  DCL
        指针控制语言  CCL
三、MySQL的入门
    1、mysql的安装与配置
    2、数据库服务器,数据库和表的关系
    3、数据和数据库中表的关系
        javabean:由一些属性和get/set方法组成的原始java类。
           分为实体javabean和表单javabean。
           实体javabean:与数据库中表的字段一一对应。
            该javabean的一个对象表明是表的一条记录。
            这种javabean也称为:
                  do  data object
                  vo  value object
                  pojo  plain old java object
        javabean的5大特征:
            类都是公有的
            都有默认的构造函数
            属性都是私有的
            都提供公有get和set方法
            一般都实现序列化接口。(带着这个问题,听第9天的课程)


四、DDL数据定义语言                (练一遍就行)
    1、库操作(创建库,编辑库,删除库)
        练习:
            创建一个名称为mydb1的数据库。
            create database MYDB1;
            查看有多少数据库:
            show databases;
            查看数据库创建细节:
            show create database MYDB1;
            创建一个使用gbk字符集的mydb2数据库。
            create database MYDB2 character set gbk;
            创建一个使用gbk字符集,并带校对规则的mydb3数据库
                查看gbk字符集下有什么校对规则
                show collation like 'gbk%';
            create database MYDB3 character set gbk collate gbk_chinese_ci;
            删除前面创建的mydb3数据库
            drop database MYDB3;
            查看服务器中的数据库,并把mydb2的字符集修改为utf8;
            show databases;
            alter database MYDB2 character set utf8;

    2、表结构操作(创建表结构,编辑表结构和删除表结构)
        练习:
            创建一个员工表:
                字段        类型
                Id        整型
                name        字符型
                gender        字符型
                birthday    日期型
                Entry_date    日期型
                job        字符型
                Salary        浮点数型
                resume        大文本型
            create table EMPLOYEE(
                ID  int,
                NAME varchar(50),
                GENDER varchar(10),
                BIRTHDAY date,
                ENTRY_DATE  date,
                JOB    varchar(100),
                SALARY  float(7,2),
                RESUME  longtext
            );
            查看表详情:desc table_name;-----------//table_name指的是表的名称。
            desc EMPLOYEE;
            在上面员工表的基本上增加一个image列。
            alter table EMPLOYEE add IMAGE blob;
            修改job列,使其长度为60。
            alter table EMPLOYEE modify JOB varchar(60);
            删除image列。
            alter table EMPLOYEE drop IMAGE;
            表名改为user。
            alter table EMPLOYEE rename to USER;
            查看库中所有表。
            show tables;
            修改表的字符集为utf8。
            alter table USER character set utf8;
            列名name修改为username。
            alter table USER change NAME USERNAME varchar(50);
五、DML数据操作语言                (重要)
    1、插入数据操作    insert
        练习:
            使用insert语句向表中插入三个员工的信息。
            insert into USER values(1,'zs','nan','1999-10-01','2011-10-10','ceo',10000,'hello');--//插入的字段与表的字段必须一一对应,必须所有字段都有值。

            insert into USER(id,name,gender,birthday,entry_date,job,salary) values(4,'aaa','nan','1999-10-01','2011-10-10','ceo',10000);//--可以选择性插入
           
            insert into USER(id,username,gender,birthday,entry_date,job,salary,resume)values(3,'张三','nan','1999-10-01','2011-10-10','ceo',10000,'你好');
            在MySQL中一共有6个地方使用了字符集。可以通过命令查看:
                show variables like 'character%';
            修改客户端的字符集:
                set character_set_client=gbk;
            设置结果集用gbk编码:
                set character_set_results=gbk;

    2、更新数据操作  update
        练习:
            将所有员工薪水修改为5000元。
            update USER set SALARY=5000;
            将姓名为’zs’的员工薪水修改为3000元。
            update USER set SALARY=3000 where USERNAME = 'zs';
            将姓名为’aaa’的员工薪水修改为4000元,job改为ccc。
            update USER set SALARY=4000,JOB='ccc' where USERNAME='aaa';
            将'张三'的薪水在原有基础上增加1000元。
            update USER set SALARY=SALARY+1000 where USERNAME='张三';
    3、删除数据操作  delete
        练习:
            删除表中名称为’zs’的记录。
            delete from USER where USERNAME='zs';
            删除表中所有记录。
            delete from USER;
            使用truncate删除表中记录。
            truncate table USER;
六、DQL数据查询语言                (重要)
    1、查询数据操作    select
        练习:
            查询表中所有学生的信息。
            select * from STUDENT;
            查询表中所有学生的姓名和对应的英语成绩。
            select NAME,ENGLISH from STUDENT;
            过滤表中重复数据。
            select distinct ENGLISH from STUDENT;
        练习:(使用表达式和列(表)别名)
            在所有学生数学分数上加10分特长分。
            select NAME as '学生姓名',MATH as '数学成绩',MATH+10 as '特长成绩' from STUDENT;
            统计每个学生的总分。
            select NAME as 学生姓名,CHINESE+MATH+ENGLISH 总分 from STUDENT;
            使用别名表示学生分数。
            select NAME 学生姓名,CHINESE '语文成绩',MATH as 数学成绩,ENGLISH as '英语成绩' from STUDENT;
        练习:(使用条件进行过滤查询)
            查询姓名为王五的学生成绩
            select * from STUDENT where NAME = '王五';
            查询英语成绩大于90分的同学
            select * from STUDENT where ENGLISH > 90;
            查询总分大于200分的所有同学
            select * from STUDENT where CHINESE+MATH+ENGLISH>200;
            查询英语分数在 80-90之间的同学。
            select * from STUDENT where ENGLISH between 80 and 90;
            查询数学分数为89,90,91的同学。
            select * from STUDENT where MATH in(89,90,91);
            查询所有姓李的学生成绩。
            select * from STUDENT where NAME like '李%';
            查询数学分>80,语文分>80的同学。
            select * from STUDENT where MATH>80 and CHINESE>80;
        练习:(将查询结果排序)
            对数学成绩排序后输出。
            select NAME,MATH from STUDENT order by MATH;
            对总分排序后输出,然后再按从高到低的顺序输出。
            select NAME,CHINESE+MATH+ENGLISH as TOTALSCORE from STUDENT order by TOTALSCORE desc;
            对姓李的学生成绩排序输出。
            select NAME,CHINESE,MATH,ENGLISH,CHINESE+MATH+ENGLISH as TOTALSCORE from STUDENT where NAME like '李%' order by TOTALSCORE;
七、数据完整性和多表设计                (重要)
    1、数据完整性的概述
    2、数据完整性的主要分类
        2.1、实体完整性(主键)
            练习:
                创建带主键的表(四种方式)
                第一种:写在字段后
                create table T1(
                    id int primary key,
                    name varchar(20)
                );
                第二种:写在所有字段后
                create table T2(
                    id int,
                    name varchar(20),
                    primary key(id,name)
                );
                第三种:使用alter添加
                create table T3(
                    id int,
                    name varchar(20)
                );
                alter table T3 add primary key(id);
                第四种:使用自增长    不建议使用
                create table T4(
                    id int primary key auto_increment,//是mysql独有的
                    name varchar(20)
                );
        2.2、域完整性(数据类型,非空和唯一)
            练习:
                创建带主键,非空约束和唯一约束的表
                create table T5(
                    id int primary key,
                    name varchar(50) not null,
                    gender varchar(10) not null,
                    phone varchar(15) not null unique,
                    idcard varchar(18) unique
                );
        2.3、参照完整性(多表设计)
            练习:
                创建一对多关系的表,使用外键
                创建多对多关系的表,使用外键
八、DQL的复杂查询                (重要)
    1、连接查询(显示和隐式)
        练习:
            a、交叉连接:cross join   
            select * from customer,orders;//隐式交叉连接
            select * from customer cross join orders;//显式交叉连接
            b、内连接:inner join   
            select * from customer c,orders o where c.id=o.customer_id;//隐式
            select * from customer c inner join orders o on c.id = o.customer_id;//显式
            c、外连接:
                 左外连接:
                 select * from customer c left outer join orders o on c.id=o.customer_id;
                 右外连接:
                 select * from customer c right outer join orders o on c.id=o.customer_id;
    2、子查询
        练习:
            查询“马化腾”的所有订单信息
                形式一:多条查询语句
                select id from CUSTOMER where name='马化腾';
                select * from orders where customer_id = 1;
                形式二:subselect(子查询)
                select * from orders where customer_id=(select id from CUSTOMER where name='马化腾');
            查询订单价格大于100的有哪些客户
                select * from customer where id in (select customer_id from orders where price>100);
    3、常用聚合函数
        练习:
            统计一个班级共有多少学生?
            select count(*) from STUDENT;
            统计数学成绩大于90的学生有多少个?
            select count(*) from STUDENT where MATH>90;
            统计总分大于250的人数有多少?where可以使用表达式
            select count(*) from STUDENT where CHINESE+MATH+ENGLISH>250;
            统计一个班级数学总成绩?
            select sum(MATH) from STUDENT;
            统计一个班级语文、英语、数学各科的总成绩
            select sum(CHINESE),sum(ENGLISH),sum(MATH) from STUDENT;
            统计一个班级语文、英语、数学的成绩总和
            select sum(CHINESE+MATH+ENGLISH) from STUDENT;
            统计一个班级语文成绩平均分
            select avg(CHINESE) from STUDENT;
            select sum(CHINESE)/count(*) from STUDENT;
        练习:(分组(报表)查询)
            对订单表中商品归类后,显示每一类商品的总价
            select product_name,sum(price) from PRODUCT group by product_name;
            查询购买了几类商品,并且每类总价大于100的商品
            select product_name from PRODUCT group by product_name having sum(price)>100;
    4、其他函数
九、数据库的备份与恢复            (练一遍就行)
    1、数据库的备份
    2、数据库的恢复

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多