数据库相关基础

数据(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;

 

转载于:https://www.cnblogs.com/clever765/articles/7341002.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值