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列相关联。
添加了外建约束后,不能随便取值,取值是引用表存在主键值,也不能随便删除值。

 

posted @ 2015-07-04 16:36  偷月光的贼  阅读(2033)  评论(0编辑  收藏  举报