数据库概述:
数据库有什么用?
~实现数据持久性地存储在本地
~使用完整的系统统一管理数据,实现结构化查询,方便管理
数据库:为了数据方便地存储和管理,将数据按照特定的规则存储在磁盘,就是存储数据的仓库
数据库的相关概念
常见的数据库产品(了解性知识)
外国:
MySql 开源,快捷,可靠
Oracle 功能强大,收费
SQl SERVER:只能安装在Windows系统
DB2(IBM):适合处理海量数据,收费
国内:
南大通用;
神通;
人大金仓;
达梦
MySql数据库:
MySql数据库是关系型数据库管理系统,由瑞典MySQL AB公司开发而来,但是目前MySQL属于Oracle旗下产品,
MySQL:
MySQL使用标准的SQL语言,支持多种操作系统,支持多种语言
MySQL具有可靠,快捷和易于使用的特点
MySQL是免费开源的一款产品,可以自己修改源码,开发MySQL供自己使用
MySQL的常用命令
sql:
SQL(structed query language)是一种带有特殊目的的编程语言,是一种数据库查询和设计语言,用于存储数据以及查询,更新和管理关系数据库系统
优点:不是某个产品的专用语言,几乎所有的DBMS都支持SQL语言,简单易学,灵活使用,可以进行非常复杂的和高级的数据库操作
DDL:
DDL(data definition language):是用来创建和修改数据库结构的语言
常见的DDL关键字:create,drop,alter,rename
![](https://img-blog.csdnimg.cn/direct/5c4fbe1696f94cd1a060e7b769a9b92c.png)
![](https://img-blog.csdnimg.cn/direct/306e96ec66f548668776d9484f942fd9.png)
-- 创建表
CREATE TABLE student(
sno INT(10) PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
NAME VARCHAR(10) NOT NULL COMMENT '姓名',
phone_num INT(13)NOT NULL UNIQUE COMMENT '手机号',
grnder CHAR(1) DEFAULT '男' COMMENT '性别',
height DECIMAL(3,2) CHECK(height<2.62),
birthday DATE,
opr_time DATETIME
)
-- 总结来说,抽象类不能创建实例是因为它只是一个模板或者接口,需要子类来实现具体的功能。
-- 通过继承抽象类并实现其中的抽象方法, 我们可以创建具体的子类对象来满足实际需求
-- 重命名表名
RENAME TABLE student TO student_f;
-- ddl删除操作
DROP TABLE student_f
-- 复制表结构
CREATE TABLE copy LIKE student;
-- ddl修改表结构 alter
ALTER TABLE copy RENAME TO coppy
DML
DML(data management language):是用来对数据库进行操纵的语言
DML语言常见的关键字:update,delete,insert
-- DML
-- 删除
DELETE FROM 表名 WHERE 条件
TRUNCATE TABLE 表名;-- 清空整张表
-- 修改
UPDATE 表名 SET 列名=新值 WHERE 条件
-- 插入
INSERT INTO coppy(NAME,phone_num,grnder,height,birthday,opr_time)
VALUES('lidaye',123456789,'n',1.23,NOW(),NOW())
INSERT INTO coppy(NAME,phone_num,grnder,height,birthday,opr_time)
VALUES('lid',12345679,'n',1.23,NOW(),NOW()),
('李青龙',1321231,'女',1.56,NOW(),NOW()),
('六',1233211,'女',1.66,NOW(),NOW())
DELETE FROM coppy
-- 函数now 获取当前时间
INSERT INTO student(NAME,phone_num,grnder,height,birthday,opr_time)
VALUES('lid',12345679,'n',1.23,NOW(),NOW()),
('李青龙',1321231,'女',1.56,NOW(),NOW()),
('六',1233211,'女',1.66,NOW(),NOW()),
('lidaye',123456789,'n',1.23,NOW(),NOW())
DQL
DQL(data query language):是使用频率最高的操作,
可以从一张表查询数据,也可以从多张表中查询数据
CREATE DATABASE NBAmag
CREATE TABLE team(NO INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(9) NOT NULL UNIQUE,
addresss VARCHAR(16) NOT NULL)
INSERT INTO team(NAME,addresss)
VALUES('湖人','洛杉矶'),
('火箭','休斯顿'),
('凯尔特人','波士顿'),
('骑士','克利夫兰'),
('马刺','圣安东尼奥'),
('魔术','奥兰多')
CREATE TABLE teamnum(num INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(10) NOT NULL,
birthday DATE,
age INT NOT NULL,
height DECIMAL(3,2) ,
location VARCHAR(16) )
DROP TABLE teamnum
INSERT INTO teamnum(NAME,birthday,age,height,location)
VALUES('韦德','1982-1-17',42,1.9,'后卫'),
('詹姆斯','1982-12-23',42,2.1,'前锋'),
('科比','1978-12-23',46,2.01,'后卫')
INSERT INTO teamnum(NAME,birthday,age,height,location)
VALUES('奥尼尔','1972-12-12',51,2.02,'中锋'),
('乔丹','1963-12-23',60,2.01,'前锋')
DROP TABLE teamnum
-- 条件查询
/*
使用WHERE 子句,将不满足条件的行过滤掉,WHERE 子句紧随 FROM 子句。
语法:select <结果> from <表名> where <条件>
比较
=, != 或<>, >, <, >=, <=
逻辑运算
and 与
or 或
not 非
*/
SELECT *FROM team WHERE NAME IS NOT NULL
SELECT * FROM teamnum WHERE height>1.9 AND height<1.99 OR height != 2.1
SELECT * FROM teamnum WHERE height <> 1.9
SELECT * FROM team WHERE NAME='魔术'
/*
条件查询
模糊查询
LIKE :是否匹配于一个模式 一般和通配符搭配使用,可以判断字符型数值
或数值型. 通配符: % 任意多个字符
between and 两者之间,包含临界值;
in 判断某字段的值是否属于in列表中的某一项
IS NULL(为空的)或 IS NOT NULL(不为空的)
*/
SELECT * FROM team WHERE NAME LIKE '火%'
SELECT SUM(height) FROM teamnum WHERE height BETWEEN 1.6 AND 2.2 -- 包含临界值
SELECT AVG(height) FROM teamnum
WHERE height IN(SELECT height FROM teamnum
WHERE height IS NOT NULL)
-- not 非
SELECT * FROM team WHERE NAME IN('湖人','火箭')
ALTER TABLE
/*
1、UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
2、UNION ALL 的语法如下:
[SQL 语句 1]
UNION ALL
[SQL 语句 2]
当使用union 时,mysql 会把结果集中重复的记录删掉,而使用union all ,
mysql 会把所有的记录返回,且效率高于union 。
*/
SELECT * FROM teamnum WHERE height IS NULL AND location LIKE '中%'
UNION
SELECT * FROM teamnum WHERE NAME IS NOT NULL
SELECT * FROM teamnum WHERE height IS NULL AND location LIKE '中%'
UNION ALL
SELECT * FROM teamnum WHERE NAME IS NOT NULL
/*
• 排序
查询结果排序,使用 ORDER BY 子句排序 order by 排序列 ASC/DESC
asc代表的是升序,desc代表的是降序,如果不写,默认是升序
order by子句中可以支持单个字段、多个字段
*/
SELECT * FROM teamnum ORDER BY age DESC
SELECT * FROM teamnum ORDER BY height DESC
/*
数量限制
limit子句:对查询的显示结果限制数目 (sql语句最末尾位置)
SELECT * FROM table LIMIT offset rows;
SELECT * from table LIMIT 0,5;
*/
SELECT * FROM teamnum LIMIT 0,2
-- sql server 中用top2 查询前两条
函数
类似于JAVA语言中的方法,C语言中的函数,可以直接调用