快捷搜索:  汽车  科技

数据库数据类型怎么使用(学习数据库最重要的第一步)

数据库数据类型怎么使用(学习数据库最重要的第一步)KEY FK_ `字段名` (`字段名`) 外键约束:给外键字段添加约束执行引用另外一张表的同一个字段名PRIMARY KEY (`字段名`) 外键:use 数据库名; 表的操作伪代码:create table [if not exists] `表名`( '字段名1' 列类型 [属性][索引][注释] '字段名2' 列类型 [属性][索引][注释] '字段名n' 列类型 [属性][索引][注释] )[表类型][表字符集][注释] 实例:-- 创建外键的方式一 : 创建子表同时创建外键 -- 年级表 (id\年级名称) CREATE TABLE `grade` ( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID'

数据库数据类型怎么使用(学习数据库最重要的第一步)(1)

数据库基本操作

update user set password=password('123456')where user='root'; 修改密码 flush privileges; 刷新数据库 show databases; 显示所有数据库 use dbname; 打开某个数据库 show tables; 显示数据库mysql中所有的表 describe user; 显示表mysql数据库中user表的列信息 create database name; 创建数据库 use databasename; 选择数据库 exit; 退出Mysql ? 命令关键词 : 寻求帮助 -- 表示注释

创建数据库:

CREATE DATABASE 数据库名 //创建数据库

删除数据库 :

drop database [if exists] 数据库名;

查看数据库 :

show databases;

使用数据库 :

use 数据库名; 表的操作

伪代码:

create table [if not exists] `表名`( '字段名1' 列类型 [属性][索引][注释] '字段名2' 列类型 [属性][索引][注释] '字段名n' 列类型 [属性][索引][注释] )[表类型][表字符集][注释]

实例:

-- 创建外键的方式一 : 创建子表同时创建外键 -- 年级表 (id\年级名称) CREATE TABLE `grade` ( `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级ID' `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称' PRIMARY KEY (`gradeid`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 -- 学生信息表 (学号 姓名 性别 年级 手机 地址 出生日期 邮箱 身份证号) CREATE TABLE `Student` ( `Sno` INT(4) NOT NULL COMMENT '学号' `Sname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名' `Ssex` TINYINT(1) DEFAULT '1' COMMENT '性别' `gradeid` INT(10) DEFAULT NULL COMMENT '年级' `phoneNum` VARCHAR(50) NOT NULL COMMENT '手机' `address` VARCHAR(255) DEFAULT NULL COMMENT '地址' `borndate` DATETIME DEFAULT NULL COMMENT '生日' `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱' `idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号' PRIMARY KEY (`studentno`) KEY `FK_gradeid` (`gradeid`) CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`) ) ENGINE=INNODB DEFAULT CHARSET=utf8

主键:

PRIMARY KEY (`字段名`)

外键:

KEY FK_ `字段名` (`字段名`)

外键约束:给外键字段添加约束执行引用另外一张表的同一个字段名

CONSTRAINT `FK_字段名` FOREIGN KEY (`字段名`) REFERENCES `另外一张表名` (`另外一张表字段名`)

设置非空:

NOT NULL

自增:

AUTO_INCREMENT

备注:

COMMENT `备注信息`

默认值:

DEFAULT '默认值'

设置索引:

ENGINE=InnoD

设置默认字符编码 :

DEFAULT CHARSET=utf8

修改表名 :

ALTER TABLE 旧表名 RENAME AS 新表名

添加字段 :

ALTER TABLE 表名 ADD字段名 列属性[属性]

修改字段 :

ALTER TABLE 表名 MODIFY 字段名 列类型[属性] ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]

删除字段 :

ALTER TABLE 表名 DROP 字段名

删除表语法:

DROP TABLE [IF EXISTS] 表名 添加数据

INSERT命令

语法:

INSERT INTO <表名>[(<字段1> <字段2> <字段3> ...)] VALUES('值1' '值2' '值3')

实例一:

INSERT INTO Student(Sno Sname Ssex Sdept Sage) VALUES(1001 '张三' '男' '信息工程' 18)

实例二:

INSERT INTO Student(Sno Sname Ssex Sdept Sage) VALUES(1001 '张三' '男' '信息工程' 18) (1002 '李四' '男' '信息工程' 19) 删除数据

DELETE命令

TRUNCATE命令

作用:用于完全清空表数据 但表结构 索引 约束等不变 ;

语法:

DELETE FROM <表名> [WHERE <条件>];

实例:

DELETE FROM Student WHERE Sno = 10001; 修改数据

update命令

语法:

UPDATE <表名> SET <列名>=<表达式> [ <列名>=<表达式> ]... [WHERE <条件>];

实例一:

UPDATE Student SET Sdept = `计算机` Sage = 23 WHERE Sno = 1001

实例二:多条件

UPDATE Student SET Sdept = `计算机` Sage = 23 WHERE Sname = `张三` and Ssex = `男`

where条件语句:

运算符

含义

用法

=

等于

Sage = 18

<> 或 !=

不等于

Sage != 0

>

大于

Sage > 1

<

小于

Sage < 100

>=

大于或等于

Sage >= 1

<=

小于或等于

Sage <= 100

Sage <= 100

在某个范围之间

BETWEEN 1 AND 100

AND

并且

Sage >0 AND Sage<101

OR

Sage > 0 OR Sage < 101

查询数据

select命令

简单语法:

select * from Student --查询所有学生信息 指定字段查询:

select Sno Sname from Student --查询学生表的学号和姓名 别名:可以给..... 字段起别名;也可以给 ....表起别名

selcet Sno as 学号 Sname as 名字 from Student 函数Concat(<字符串> <列表名>):拼接字符串

select CONCAT('姓名:' Sname) from Student --查询结果 姓名:张三 DISTINCT 去重:去除重复数据

-- # 查看哪些同学参加了考试(学号) 去除重复项 SELECT * FROM result; -- 查看考试成绩 SELECT studentno FROM result; -- 查看哪些同学参加了考试 SELECT DISTINCT studentno FROM result; -- 了解:DISTINCT 去除重复项 (默认是ALL) where条件语句

操作符名称

语法

描述

AND 或 &&

a AND b 或 a && b

逻辑与,同时为真结果才为真

OR

a OR b

逻辑或,只要一个为真,则结果为真

NOT 或 !

NOT a 或 !a

逻辑非,若操作数为假,则结果为真!

实例:

-- 查询考试成绩在95-100之间的 SELECT Studentno StudentResult FROM result WHERE StudentResult>=95 AND StudentResult<=100; SELECT Studentno StudentResult FROM result WHERE StudentResult BETWEEN 95 AND 100; -- 除了1000号同学 要其他同学的成绩 SELECT studentno studentresult FROM result WHERE studentno!=1000; -- 使用NOT SELECT studentno studentresult FROM result WHERE NOT studentno=1000; 模糊查询 : 比较操作符

操作符名称

操作符名称

描述

IS NULL

a IS NULL

若操作符为NULL,则结果为真

IS NOT NULL

a IS NOT NULL

若操作符不为NULL,则结果为真

BETWEEN

a BETWEEN b AND c

若 a 范围在 b 与 c 之间,则结果为真

LIKE

a LIKE b

SQL 模式匹配,若a匹配b,则结果为真

IN

a IN (a1,a2,a3,......)

) 若 a 等于 a1 a2..... 中的某一个,则结果为真

实例:

<spna style="margin: 0px; padding: 0px; color: rgb(255 0 0);">LIKE的运用</spna>

-- 查询姓张的同学的学号及姓名 -- like结合使用的通配符 : % (代表0到任意个字符) _ (一个字符) SELECT Sno Sname FROM Student WHERE Sname LIKE '张%'; -- 查询姓张的同学 后面只有一个字的 SELECT Sno Sname FROM Student WHERE studentname LIKE '张_'; -- 查询姓张的同学 后面只有两个字的 SELECT Sno Sname FROM Student WHERE Sname LIKE '张__';

IN的运用

-- 查询学号为1000 1001 1002的学生姓名 SELECT Sno Sname FROM Student WHERE Sno IN (1000 1001 1002); -- 查询地址在广州 深圳的学生 SELECT Sno Sname address FROM Student WHERE address IN ('广州' '深圳');

NULL的运用

-- 查询出生日期没有填写的同学 SELECT Sname FROM Student WHERE BornDate IS NULL; -- 查询出生日期填写的同学 SELECT Sname FROM Student WHERE BornDate IS NOT NULL; -- 查询没有写家庭住址的同学(空字符串不等于null) SELECT Sname FROM Student WHERE Address='' OR Address IS NULL; 多表查询

JOIN连接:

操作符名称

描述

INNER JOIN

两个表之间交集

LEFT JOIN

两个表之间交集,并向左表拼接

RIGHT JOIN

两个表之间交集,并向右表拼接

内连接 inner join
查询两个表中的结果集中的交集
外连接 outer join
查询两个表中的结果集中的并集
左外连接 left join
以左表作为基准 右边表来一一匹配 匹配不上的 返回左表的记录 右表以NULL填充
右外连接 right join
以右表作为基准 左边表来一一匹配 匹配不上的 返回右表的记录 左表以NULL填充

-- 查询参加了考试的同学信息(学号 学生姓名 科目编号 分数)
--Student表(学号 学生姓名)和result表(学生姓名 科目编号 分数)

SELECT s.Sno Sname subjectno StudentResult FROM Student s INNER JOIN result r ON r.Sno = s.Sno

-- 右连接(也可实现) SELECT s.Sno Sname subjectno StudentResult FROM student s RIGHT JOIN result r ON r.Sno = s.Sno

-- 等值连接 SELECT s.Sno Sname subjectno StudentResult FROM Student s result r WHERE r.Sno = s.Sno

-- 左连接 (查询了所有同学 不考试的也会查出来) SELECT s.Sno Sname subjectno StudentResult FROM Student s LEFT JOIN result r ON r.Sno = s.Sno

-- 查一下缺考的同学(左连接应用场景) SELECT s.Sno Sname subjectno StudentResult FROM Student s LEFT JOIN result r ON r.Sno = s.Sno WHERE StudentResult IS NULL

-- 思考题:查询参加了考试的同学信息(学号 学生姓名 科目名 分数) SELECT s.Sno Sname Sname StudentResult FROM Student s INNER JOIN result r ON r.Sno = s.Sno INNER JOIN `subject` sub ON sub.Sno = r.Sno 自连接查询

-- 创建一个表 CREATE TABLE `category` ( `categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id' `pid` INT(10) NOT NULL COMMENT '父id' `categoryName` VARCHAR(50) NOT NULL COMMENT '主题名字' PRIMARY KEY (`categoryid`) ) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 -- 插入数据 INSERT INTO `category` (`categoryid` `pid` `categoryName`) VALUES('2' '1' '信息技术') ('3' '1' '软件开发') ('4' '3' '数据库') ('5' '1' '美术设计') ('6' '3' 'web开发') ('7' '5' 'ps技术') ('8' '2' '办公信息');

实例操作:

-- 编写SQL语句 将栏目的父子关系呈现出来 (父栏目名称 子栏目名称) -- 核心思想:把一张表看成两张一模一样的表 然后将这两张表连接查询(自连接) SELECT a.categoryName AS '父栏目' b.categoryName AS '子栏目' FROM category AS a category AS b WHERE a.`categoryid`=b.`pid`

-- 思考题:查询参加了考试的同学信息(学号 学生姓名 科目名 分数) SELECT s.studentno studentname subjectname StudentResult FROM student s INNER JOIN result r ON r.studentno = s.studentno INNER JOIN `subject` sub ON sub.subjectno = r.subjectno

-- 查询学员及所属的年级(学号 学生姓名 年级名) SELECT studentno AS 学号 studentname AS 学生姓名 gradename AS 年级名称 FROM student s INNER JOIN grade g ON s.`GradeId` = g.`GradeID`

-- 查询科目及所属的年级(科目名称 年级名称) SELECT subjectname AS 科目名称 gradename AS 年级名称 FROM SUBJECT sub INNER JOIN grade g ON sub.gradeid = g.gradeid

-- 查询 数据库结构-1 的所有考试结果(学号 学生姓名 科目名称 成绩) SELECT s.studentno studentname subjectname StudentResult FROM student s INNER JOIN result r ON r.studentno = s.studentno INNER JOIN `subject` sub ON r.subjectno = sub.subjectno WHERE subjectname='数据库结构-1' 子查询

什么是子查询?
在查询语句中的WHERE条件子句中 又嵌套了另一个查询语句
嵌套查询可由多个子查询组成 求解的方式是由里及外;
子查询返回的结果一般都是集合 故而建议使用IN关键字;

操作实例:

-- 查询 数据库结构-1 的所有考试结果(学号 科目编号 成绩) 并且成绩降序排列 -- 方法一:使用连接查询 SELECT studentno r.subjectno StudentResult FROM result r INNER JOIN `subject` sub ON r.`SubjectNo`=sub.`SubjectNo` WHERE subjectname = '数据库结构-1' ORDER BY studentresult DESC; -- 方法二:使用子查询(执行顺序:由里及外) SELECT studentno subjectno StudentResult FROM result WHERE subjectno=( SELECT subjectno FROM `subject` WHERE subjectname = '数据库结构-1' ) ORDER BY studentresult DESC;

-- 查询课程为 高等数学-2 且分数不小于80分的学生的学号和姓名 -- 方法一:使用连接查询 SELECT s.studentno studentname FROM student s INNER JOIN result r ON s.`StudentNo` = r.`StudentNo` INNER JOIN `subject` sub ON sub.`SubjectNo` = r.`SubjectNo` WHERE subjectname = '高等数学-2' AND StudentResult>=80 -- 方法二:使用连接查询 子查询 -- 分数不小于80分的学生的学号和姓名 SELECT r.studentno studentname FROM student s INNER JOIN result r ON s.`StudentNo`=r.`StudentNo` WHERE StudentResult>=80

-- 方法三:使用子查询 -- 分步写简单sql语句 然后将其嵌套起来 SELECT studentno studentname FROM student WHERE studentno IN( SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=( SELECT subjectno FROM `subject` WHERE subjectname = '高等数学-2' ) ) 常用函数

数据函数:

SELECT ABS(-8); /*绝对值*/ SELECT CEILING(9.4); /*向上取整*/ SELECT FLOOR(9.4); /*向下取整*/ SELECT RAND(); /*随机数 返回一个0-1之间的随机数*/ SELECT SIGN(0); /*符号函数: 负数返回-1 正数返回1 0返回0*/

字符串函数:

SELECT CHAR_LENGTH('我在学Mysql'); /*返回字符串包含的字符数*/ SELECT CONCAT('我' '爱' '程序'); /*合并字符串 参数可以有多个*/ SELECT INSERT('我爱编程helloworld' 1 2 '超级热爱'); /*替换字符串 从某个位置开始替 换某个长度*/ SELECT LOWER('Study'); /*小写*/ SELECT UPPER('Study'); /*大写*/ SELECT LEFT('hello world' 5); /*从左边截取*/ SELECT RIGHT('hello world' 5); /*从右边截取*/ SELECT REPLACE('坚持就能成功' '坚持' '努力'); /*替换字符串*/ SELECT SUBSTR('坚持就能成功' 4 6); /*截取字符串 开始和长度*/ SELECT REVERSE('坚持就能成功'); /*反转 -- 查询姓周的同学 改成邹 SELECT REPLACE(studentname '周' '邹') AS 新名字 FROM student WHERE studentname LIKE '周%';

日期和时间函数:

SELECT CURRENT_DATE(); /*获取当前日期*/ SELECT CURDATE(); /*获取当前日期*/ SELECT NOW(); /*获取当前日期和时间*/ SELECT LOCALTIME(); /*获取当前日期和时间*/ SELECT SYSDATE(); /*获取当前日期和时间*/ -- 获取年月日 时分秒 SELECT YEAR(NOW()); SELECT MONTH(NOW()); SELECT DAY(NOW()); SELECT HOUR(NOW()); SELECT MINUTE(NOW()); SELECT SECOND(NOW()); 聚合函数

函数名称

描述

COUNT()

返回满足Select条件的记录总和数,如 select count(*) 【不建议使用 *,效率低】

SUM()

返回数字字段或表达式列作统计,返回一列的总和。

AVG()

通常为数值字段或表达列作统计,返回一列的平均值

MAX()

可以为数值字段,字符字段或表达式列作统计,返回最大的值。

MIN()

可以为数值字段,字符字段或表达式列作统计,返回最小的值。

实例:

-- 查询不同课程的平均分 最高分 最低分 -- 前提:根据不同的课程进行分组 SELECT subjectname AVG(studentresult) AS 平均分 MAX(StudentResult) AS 最高 分 MIN(StudentResult) AS 最低分 FROM result AS r INNER JOIN `subject` AS s ON r.subjectno = s.subjectno GROUP BY r.subjectno HAVING 平均分>80;

分类: [Mysql数据库]

数据库数据类型怎么使用(学习数据库最重要的第一步)(2)

猜您喜欢: