数据(Data)的定义:
对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。
数据的种类
文字、图形、图象、声音
数据的特点
数据与其语义是不可分的
数据库
按照数据结构来组织、存储和管理数据的仓库
数据库的优点
数据按一定的数据模型组织、描述和储存
可为各种用户共享
冗余度较小,节省存储空间
易扩展,编写有关数据库应用程序
数据库的类型
纯文本数据库、关系数据库
数据库模型有:层次模型、网状模型和关系模型。
数据库管理系统:是用于建立、使用和维护数据库,简称DBMS。
时下流行的DBMS:
Oracle
应用广泛、功能强大,分布式数据库系统
,“关系-对象”型数据库
MySQL
快捷、可靠
,开源、免费、与PHP组成经典的LAMP组合
SQL Server
针对不同用户群体的五个特殊的版本,
易用性好
DB2
应用于大型应用系统,具有较好的可伸缩性
数据操纵功能:
提供数据操纵语言(DML)
操纵数据实现对数据库的基本操作
(查询、插入、删除和修改)
MYSQL特征
性能快捷、优化SQL语言
容易使用
多线程和可靠性
多用户支持
可移植性和开放源代码
遵循国际标准和国际化支持
为多种编程语言提供API
mysql命令
mysql -uroot–ppassword
h:当连接MySQL服务器不在同台主机时,填写主机名或IP地址
u:登录MySQL的用户名
p:登录MySQL的密码
注意:密码如果写在命令行的时候一定不能有空格。
SQL语法组成:
DML( Data Manipulation Language数据操作语言)
——查询、插入、删除和修改数据库中的数据;
——SELECT、INSERT、 UPDATE 、DELETE等
DCL( Data Control Language数据控制语言)
——用来控制存取许可、存取权限等;
——GRANT、REVOKE 等;
CHAR和VARCHAR类型
:
CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。他们之间的差别在于MySQL处理存储的方式:
CHAR把这个大小视为值的准确大小(用空格填补比较短的值)。
建立数据库操作:
create+database+数据库名;**不区分大小写**
删除数据库:
drop+database+数据库名;
建立表操作:
语法:create table 表名(
列名1 列类型 [<列的完整性约束>],
列名2 列类型 [<列的完整性约束>],)
建立一个表student,其由两列组成(id, name(20字符)),第一列属性为非空,并做为主键,并自增
not null非空
auto_increment自增
primary key主键
主键:
表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。
最少性:尽量选择单个键作为主键
稳定性:尽量选择数值更新少的列作为主键
常见完整性约束:
PRIMARY KEY 主码约束(主键)
UNIQUE 唯一性约束
NOT NULL 非空值约束
AUTO_INCREMENT 用于整数列默认自增1
default_value 默认值约束
CHARACTER SET name 指定字符集(仅适用字符串):utf-8 gbk
显示表结构操作:
语法:describe 表名;
desc 表名;
create table student(
id int primary key auto_increment,
name varchar(50) not null,
sex varchar(2)not null ,
age int,
javascore double default 80
);
表里插入值;
insert into 表名(字段1,字段2,字段3)values(值1,值2,值3),(值1,值2,值3);值匹配前面的字段
insert into student(name,sex,age)value("刘伦","女",20);
查询:根据需求去完成查询,不建议用*
select*from+表名:
select*from student;
select name,age from student;
修改字段名:
select id as "编号" from student;
修改数据:
update 表名 set 字段=值 where 条件
update student set score=250 where id=3;
删除表里的数据:
delete from 表名 where 条件
delete from sutdent where id=3;
删除表drop;
drop table 表名;
drop table if exists 表名,数据库名字,防止报error错误;
drop database if exists stusystem
create database stusystem;
删除表操作
语法:
drop table [if exists] tab_name [,tab_name]...
叙述:从数据库中删除给定的表。如果给出if exists 子句,则删除不存在的表不会出错。
删除数据库操作:
语法:drop database [if exists] db_name
叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。
如果给出if exists 子句,则删除不存在的数据库不会出错。
修改表结构:
alter table 表名 action
action=添加:add 列名 建表语句;
添加一列:alter table student add sex varchar(2) not null;
修改默认值:选择表+选择字段+设置alter table student alter sex set default "男";
修改列名:
change+旧列名+新列名+<建表语句>+[first | after 列名]
alter table student change age mathscore int;
删除一列:alter table student drop+列名;drop sex;
modify 列名 <建表语句> [first | after 列名]
和change的作用相同
alter table student drop 列名 //可以删除一列
alter table student drop primary key //可以删除主键
alter table student engine 类型名 //可以改变表类型
alter table student rename as 新表名 //可以将表名更改
运算符:= != <
in(a,b),在里面;between:在A and B之间;
like:像;like "%a%";
a%b表示以a开头,以b结尾的任意长度的字符串。
“_ ”(下横线) 代表任意单个字符:a_b表示以a开头,以b结尾的长度为3的任意字符串。
逻辑运算符:and&& or|| not!
group by子句:对匹配where子句的查询结果进行分组
having子句:对分组后的结果进行条件限制
order by子句:对查询结果结果进行排序,后面跟desc降序或asc升序(默认).order by salary desc;
limit子句:对查询的显示结果限制数目 limit 4:查询结果的前4条;
limit m,n 代表第(m+1)开始,n代表条数; select*from worker order by sallary desc limit 1,4;
查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。
select sname,'year of birth: ',2008-sage, islower(sdept) from student;
查询选修了课程的学生学号(去掉重复的记录)
select distinct studentid from sc;
查询全体学生的学号与姓名,用中文显示列名。
select sno as ‘编号’,sname as ‘姓名’ from student;
主要的集函数:
记数函数: count(列名) 计算元素的个数
求和函数:
select count(*) from student;
sum(列名)对某一列的值求和,但属性必须是整型
计算平均值:
avg(列名)对某一列的值计算平均值
求最大值:
select avg(grade) from sc where courseid=1;
max(列名)找出某一列的最大值
求最小值:
select max(grade) as ‘最高分’;
min(列名)找出某一列的最小值
min(grade) as ‘最低分’ from sc where courseid=1;
查询结果+查询条件(子查询的结果)
select*from worker where sallary >(select avg(sallary)from worker where nation = "汉族");
select s.avg(sallary) as 人事平均工资, b.avg(sallary) as 研发平均工资 from worker where s.section ="人事管理部" ,b.section = "研发部";
sql高级:
1,高级查询:外键关联,联合,关联查询;
主键:primary key;唯一
外键:foreign key:可有多个:not null;
先建从表,再主表;
create table nation(
nid int primary key auto_increment,
name varchar(50) not null
);
insert into nation (name) values ("汉族"),("藏族"),("彝族");
create table department(
did int primary key auto_increment,
dname varchar(50)
);
insert into department(dname) value ("人事部"),("销售部"),("小卖部");
create table emply(
id int primary key auto_increment,
ename varchar(50) not null,
sex varchar(10),
sallary double,
nid int,
foreign key(nid) references nation(nid),
did int,
foreign key(did) references department(did)
)
insert into emply(ename,sex,sallary,nid,did) value
("张六","男",4500,1,1),
("王三","男",7000,2,2),
("李三","女",6000,3,3),
("赵三","男",8000,4,4),
("周三","女",9000,5,5),
("小三","男",3000,2,2),
("张二","女",5500,2,2),
("张五","男",5800,3,1);
民族表比较重要,部门表也是主要的,所以叫主表,员工表叫从表,要删除主表,
首先要解除和从表的关系,先删除从表或者让表对应的外键置null;
左链接查询:left join 表名 on 条件
以左表为准,右表没有对应数据用null表示;
select * from emply e left join nation n on e.nid = n.nid;
右链接查询:right join 表名 on 条件
以右表为准,左表没有对应数据在右表中不存在,则坐标中的此记录将被筛选掉;
select * from emply e right join nation n on e.nid = n.nid;
联合查询:
select *from emply e, nation n where e.nid = n.nid;