zoukankan      html  css  js  c++  java
  • SQL快速入门

    关系化数据库
    保存关系模式数据的容器
    关系模式是对业务对象实体,属性以及关系的抽象,提炼需求的名词是建立实体关系模型常用的方法。要了解E-R实体关系图的绘制。
    常用关系数据库
    Microsoft SQL Server;微软公司产品,中等规模数据库,运行在window平台,一般结合.net开发平台使用
    Oracle;甲骨文公司产品,大型商业数据库,可以运行在任何操作系统上,经常与java一起使用。
    MySQL;最初是一个开源免费的数据库产品,中小型数据库,轻便,互联网行业主流数据库
    SQLITE;嵌入式数据库,安卓内部主要数据库。

    数据库的连接与组成
    连接网络上的数据库
    mysql -h ip -P port -u root -p 回车 输入密码
    show databases; 查看所有数据库
    安装mysql后会自带两个数据库mysql,test
    mysql存放一些数据库的核心数据,用户权限密码等
    test用来测试的数据库
    在一个服务器上,可以使用多个数据库database,一个数据库内部创建对个数据表table
    在数据库中存在多个用户,每个用后都有相应的操作权限,默认有个root用户,是超级管理员具有所有权限
    table表的一行称为一条记录,一般对应着java程序中的一个对象

    SQL语言
    结构化查询语言
    特性
    1,非过程性语言,每一条SQL语句独立执行没有先后的依赖关系
    2,官方提供的数据库标准语言,任何数据库都必须支持SQL语言语法
    3,SQL是用来存取关系型数据库的语言,具有查询,操纵,定义和控制关系型数据的四方面功能。
    为加强SQL的语言能力,各厂商增强了过程性语言的特征,提供SQL语言的扩展

    SQL语言分类
    DDL;数据定义语言,用来定义数据库的对象,如数据表,视图,索引
    DML;数据操纵语言,在数据库表中更新,增加和删除记录,如update,insert,delete
    DCL;数据控制语言,用户设置用户权限和控制事务语句,如grant,revoke,if else,while,begin transaction
    DQL;数据查询语言,数据查询语言,如select

    SQL语句的使用
    创建数据库
    CREAT DATABASE[IF NOT EXISTS] db_name;
    character set 编码表 collate比较方式;//为数据库指定字符集合比较方式,如果不指定使用默认的编码集和比较方式
    查看数据库
    show creat database db_name;查看当前数据库编码集
    select database();查看当前使用的数据库
    删除数据库
    drop database db_name;
    修改数据库编码
    alter database db_name character set 编码表
    切换数据库
    use db_name;如果想要对数据库进行操作,需要切换到指定的数据库

    创建数据表
    create table table_name(列名 类型(长度),列名 类型(长度))character set编码表
    如果没有指定编码表会使用数据库默认的
    如 create table user(
    id int,
    name varchar(40),
    password varchar(40),
    birthday date
    );
    java数据类型与数据库数据类型的对应关系,除了字符串类型必须要指定长度之外其他的都可以使用默认长度
    字符串 VARCHAR,CHAR对应string,前者是长度可变经常使用,后者是长度固定的性能好些
    大数据类型 BLOB,TEXT;前者主要存些字节文件,后者存储字符文件
    数值型 TINYINT,SMALLINT,INT,BIGINT,FLOAT,DOUBLE分别对应byte,short,int,long,float,double
    逻辑型 BIT
    日期型 DATE,TIME,DATETIME,TIMESTAMP
    创建表明之后可以通过desc 表名查看表结构

    单表的约束
    定义主键约束;主键约束唯一标识一条记录,主键不能为空不能重复,主键如果为数字类型一般设置主键自动增长auto_increment
    primary key
    唯一约束;该字段内容不允许重复
    unique
    定义非空约束;值不能为空
    not null
    如 create table employee(
    id int primary key not null auto_increment,
    name varchar(40) unique not null
    gender varchar(10) not null,
    entry_date date not null,
    birthday date not null,
    job varchar(20) not null,
    resume longtext not null
    salary double not null,
    );

    数据表修改
    alter table使用该语句增加,修改或删除列的语法
    alter table 表名 add 列名 类型(长度) 约束;//增加
    alter table 表名 modify 列名 类型(长度) 约束;//修改
    alter table 表名 drop 列名 //删除
    修改已有数据表一列的名称
    alter table 表明 change 旧列名 新列名 类型(长度) 约束
    修改表名 rename table 旧表名 to 新表名
    修改表的字符集 alter table 表名 charater set utf8;要注意表的编码集与数据库的编辑不是同一个
    show tables 查看当前数据库中的所有表
    alter primary修改主键

    数据库CRUD语句
    Insert语句
    Insert into 表名(列名,列名。。。) values(值,值,。。。)
    要注意列与值的相互对应。
    Insert into employee(id,name,gender,entry_date,birthday,job,resume,salary) values(null,'zs','mall','2012-10-10','1990-01-10','hr',3000,'he is a man');
    值中除了数字不用加单引号之外,其他所有值都要加单引号
    在插入数据时,如果有些列存在默认值或者可以为null,插入可以省略这些列,只需要关注不能为空的列就好
    另外在插入数据的时候,也可以省略所有列名,但是必须按照表的顺序插入所有列的值
    要注意SQL的编码问题。

    Update语句
    update 表名 set 列名=值,列名=值 where 条件语句
    注意如果没有写where语句限制条件,则会将该列的所有数据都进行更改
    update employee set salary=5000;//这句话把所有员工的新水都改为5000
    update emploee set salary=5000 where name='zs';将zs的薪水改为5000,要注意此处算是SQL语句的饿一个bug条件比较时可能不区分大小写,如果ZS的薪水存在也会更改,需要再name前加入关键字binary使比较更精确
    update employee set salary=5000 where binary name='zs';
    update employee set salary=salary+1000 where binary name='zs';在原先的挤出上增加


    Delete语句
    delete from 表名 where 条件语句
    删除不能删除某一列的值,只能删除一行记录,如果不增加where条件语句会将表中的所有记录删除,但是不会删除表,
    表的删除使用drop语句
    另外truncate 表名 语句也可以删除所有表记录,但是不可恢复,
    truncate语句原理是将表删除,然后重新建张表,不可恢复数据,而delete语句可以删除一行记录,也可以删除整个表的所有记录,他的原理是将所有行的记录删除,并不会将表删除,在一个事务中是可以回滚rollback恢复的。删除整表时truncate语句性能好些,不会占用资源。

    select语句
    select *|指定列名 from 表名
    select * from employee 查看表中所有的数据
    select gendet from employee 查看表中的gender列数据
    select distinct gender from employee 查看表中的gender列数据,不显示重复,distinct关键字就是去重的。

    该使用什么语句应该根据具体的需求,插入语句insert 删除语句delete 都是对整行的操作 update,select是对列的操作,update可以对整列也可以加入限制条件对列的一部分操作,select只能对整列进行操作。

    查询时进行运算
    select 列名运算表达式 from 表名
    select 列名 as 列别名 from 表名
    select name,english+10 from scores;英语成绩列都加十分
    select name,english +math+chinese as 总分 from scores;注意as可以省略,该语句的作用是查询并求总分,总分显示列english +math+chinese更改为别名总分

    查询时进行过滤查询
    使用where语句进行过滤查询
    select english+math+chinese as 总分 where name='zs'查询zs的总分
    select * from scores where english >80;查询英语分数大于80的记录

    select语句中常用的运算符
    > < <= >= = <>不等于
    between...and...
    select * from scores where chinese between 70 and 80;注意先写小的后写大的
    in()在几个固定值中取值。
    select * from scorse where chinese in(70,80,90);查询语文成绩是70和80,90中的记录
    like 模糊查询结合%通配符和_通配符使用,%代表任意长度字符串,_表示单个字符
    select * from scores where name like '老%'查询名字以老开头的所有记录
    select * from scores where name like '老_'查询名字以老开头的两字名字额所有记录
    is null ,is not null ,注意不可以写=null,因为null本身就是一个值,代表1/2;0是false 1是true;
    当and与or同时使用时,and的优先级大于or

    查询时进行排序order by语句
    select * from 表名 where 条件语句 order by 列名 asc|dsc,列名asc|dsc
    asc是升序,dsc是降序

    分组函数---结合查询分组进行数据统计
    count(*)返回查询结果记录的条数
    select count(*) from scores where math>90;返回数据成绩大于90的记录共有多少条
    sum(列名)对一列的数据求和
    select sum(match) from scores ;求数学总成绩
    select sum(match),sum(chinese) from scores 求语文数学各科的成绩总和
    select sum(match+chinese) from scores 求语文数学的总成绩
    avg对列数据求平均值
    select avg(math) from scores 求数学的平均值,对于null值是不参与运算的
    select avg(math+chinese) from scores 求总分的平均分,同样有过有一条记录有个null值他的其他成绩也补参与运算
    max,min对一列数据求最值。

    分组
    分组的目的是为了统计,分组的前提是有重复数据,按照重复数据进行分组归类
    如对不同部门按照部门分组,不同班级按照班级分组。
    group by语句,要注意where是不能与group by同时使用的
    having关键字,添加分组查询的条件
    select product,sum(price) from oders group by product having sum(price)>100

    数据库数据的备份和恢复
    备份数据库 mysqldump -u 用户名 -p 数据库名>备份文件名.sql
    数据库恢复
    首先创建一个空的数据库然后 mysql -u 用户名 p 数据库名 < 文件名.sql 在cmd中使用

    外建约束的使用
    多表设计
    1,建立多张表
    2,通过外建约束建立表之间的从属关系表,
    alter table employee add foreign key(dept_id) references dept(id);对员工表添加外建约束,将部门id列与部门表的id列相关联。
    添加了外建约束后,不能随便取值,取值是引用表存在主键值,也不能随便删除值。

  • 相关阅读:
    【数学】杜教筛
    【数学】【多项式】多项式求逆
    【数学】求导
    【数学】【多项式】快速数论变换(NTT)
    【数学】【多项式】快速傅里叶变换(FFT)
    WC2021 Day3 笔记
    网络流
    $DP$ 重修
    数学基础 5
    数学基础 3
  • 原文地址:https://www.cnblogs.com/ss561/p/4620858.html
Copyright © 2011-2022 走看看