MySQL学习3

原创 2016年08月30日 18:39:17

NAVICAT安装与使用


数据库完整性约束:

为了保证数据库中数据的正确性和相容性,对关系模型提出的某种约束或规则 


完整性约束关键字:

NOT NULL:非空约束,修饰字段的值不能为空值

DEFAULT:为字段设置一个默认值

UNIQUE KEY:UK约束,修饰字段的值是唯一的(可为空值)

PRIMARY KEY:PK约束,修饰字段为该表的主键,可以作为该表的唯一标识

多字段主键:CONSTRAINT 约束名 PRIMARY KEY (字段1,字段2,......)

AUTO_INCREMENT:

修饰字段的值自动增加

一张表中只能有一个字段受此约束,必须是整数类型

FOREIGN KEY:FK约束,修饰字段为该表的外键

保证多个表的参照完整性

REFERENCES:

示例:

学生表(学生id,学生姓名) - id 自增长 学生姓名不能为空
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL);
为学生表添加年龄字段sage 默认值设为20
ALTER TABLE student ADD sage INT DEFAULT 20;
为学生表添加薪水字段ssalary 默认值设为5
ALTER TABLE student ADD ssalary INT DEFAULT 5;
为学生表添加个性字段personality 设定UK约束
ALTER TABLE student ADD personality VARCHAR(10 )UNIQUE KEY;
课程表(课程名,任课老师) - 课程名 主键 任课老师默认是陈老师
CREATE TABLE lesson(
lname VARCHAR(10) PRIMARY KEY,
teacher VARCHAR(10) DEFAULT '陈老师');
学生成绩表(学生id,课程名,考试分数)
CREATE TABLE score(
sid INT,
lname VARCHAR(10),
score INT,
设置主键
CONSTRAINT pk_sid_lname PRIMARY KEY (sid,lname),
设置外键
CONSTRAINT fk_sid FOREIGN KEY (sid) REFERENCES student(sid),
CONSTRAINT fk_lname FOREIGN KEY (lname) REFERENCES lesson(lname));

数据库操作语句:

一、单表查询:

1.插入记录(INSERTINTOVALUES)

INSERT INTO student (sname) VALUES ('王五'),('赵六');
INSERT INTO student VALUES (6,'学渣');
INSERT INTO lesson (lname) VALUES ('JAVA SE'),('数据库');
INSERT INTO score VALUES (1, 'JAVA SE', 80);
INSERT INTO score VALUES (1,'数据库',70),(2,'JAVA SE',60),(3,'JAVA SE', 100)
INSERT INTO score VALUES (1, 'JAVA EE', 80);

2.删除记录(DELETE FROMTRUNCATE)

DELETE FROM score;
TRUNCATE score;
DELETE删除记录是一条一条的删除,TRUNCATE是直接删除整个表的内容,所以TRUNCATE的删除速度较快,表中数据越多效果越明显
DELETE FROM score WHERE score < 70;
在成绩表中把张三的所有记录都删除
DELETE FROM score WHERE sid = 1;

3.修改记录(UPDATESET)

UPDATE score SET score = 80;
把所有人分数减去20
UPDATE score SET score = score - 20;
把不及格的人改成59分
UPDATE score SET score = 59 WHERE score < 60;

4.查询记录(SELECTFROM)

SELECT sname FROM student;
SELECT sname 姓名,sage 年龄 FROM student;
SELECT * FROM student;
打印所有年龄大于18岁但小于30岁的学生信息
SELECT * FROM student WHERE sage BETWEEN 18 AND 30;


5.去重查询(DISTINCT)

SELECT DISTINCT sage FROM student;


6.运算查询(含有算术表达式)
SELECT sname 姓名, 2016-sage 出生年份 FROM student;
学生表增加字段,期望薪资(K/月)默认5K。打印出所有学生的期望的年薪
SELECT sname, ssalary * 12 FROM student;

7.条件查询(WHERE)

打印出姓名为张三的学生的姓名和年龄
SELECT sname,sage FROM student WHERE sname = '张三';

8.空值查询(IS NULL)

查询出没有性格的人
SELECT * FROM student WHERE personality IS NULL;
查询出有性格的人
SELECT * FROM student WHERE personality IS NOT NULL;


9.排序查询(ORDER BY   ASC升序DESC降序

)

SELECT * FROM student ORDER BY sage DESC,ssalary DESC;
查询学生表的所有信息,以薪资的降序进行排列,当薪资相同时,以年龄的升序进行排列。年龄相同以学号的降序进行排列
SELECT * FROM student ORDER BY ssalary DESC, sage ASC, sid DESC

10.限制数量查询(LIMIT)

显示查询记录中的前两条
SELECT * FROM student LIMIT 2;
限制范围查询<span style="white-space:pre">	</span>可通过修改第一个参数实现翻页查询
SELECT * FROM student LIMIT 0,3;

11.分组查询(GROUP BY)

SELECT * FROM student GROUP BY ssalary;

二、多表查询

1.交叉连接(CROSS JOIN)

查询 student表(6行5列)和score表(4行3列)中所有的信息 24行8列
SELECT * FROM student,score;
SELECT * FROM student CROSS JOIN score;

2.内连接(INNER JOIN ON)

SELECT * FROM score INNER JOIN student ON student.sid = score.sid;
打印分数在60分以上的学生的姓名 考试科目和分数
SELECT sname, lname, score FROM student INNER JOIN score ON student.sid = score.sid && score > 60;


3.外左连接(LEFT JOIN)

左表全保留的情况下,将右表连接上去

SELECT * FROM student LEFT JOIN score ON student.sid = score.sid;
4.外右连接(RIGHT JOIN ON)

右表全保留的情况下,将左表连接上去

SELECT * FROM student RIGHT JOIN score ON student.sid = score.sid;

5.子查询

返回单行单列的子查询

输出年龄比张三大的学生的信息
SELECT * 
	FROM student 
	WHERE sage > (SELECT sage FROM student WHERE sname = '张三');
输出分数比学号是2号的学生更高的学生姓名,考试科目以及分数
SELECT sname, lname, score
	FROM student,score
	WHERE student.sid = score.sid &&
		score > (SELECT score from score WHERE sid = 2);
打印小于80分的学生姓名
思路1
SELECT sname 
	FROM student,score 
	WHERE student.sid = score.sid && score < 80;
思路2(返回多行单列的子查询)
SELECT sname
	FROM student
	WHERE sid IN (SELECT sid from score WHERE score < 80)
练习:
打印出考100分的学生的任课老师
SELECT teacher
	FROM lesson
	WHERE lname IN (SELECT lname FROM score WHERE score = 100)
打印学号大于分数表中任意一个学号的学生姓名
SELECT sname
 FROM student 
 WHERE sid < ANY(SELECT sid FROM score);
打印学号大于分数表中所有学号的学生姓名
SELECT sname
 FROM student 
 WHERE sid > ALL(SELECT sid FROM score);
打印学生表中存在,但是分数表中不存在的学生信息
SELECT *
 FROM student 
 WHERE NOT EXISTS (SELECT * FROM score WHERE student.sid = score.sid)
返回多行多列的子查询

打印学生的姓名,考试分数,任课老师(后两项如果不存在就是null)
SELECT sname,score,teacher
	FROM student LEFT JOIN(SELECT sid,teacher,score FROM score,lesson WHERE score.lname = lesson.lname)sl 
		ON student.sid = sl.sid;




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于《MySQL 必知必会》的学习3

跨过了正则表达式那一道槛,我感觉前途一片光明,虽然学习的只是关于正则表达式的很小很小一部分,但至少让我的头脑正确的接受了它。哈哈,废话不多说,继续学习~ 第10章&第11章:创建计算字段&使...

MySQL学习笔记3

  • 2017-07-13 01:02
  • 7.21MB
  • 下载

MySQL学习笔记(3)

InnoDB存储引擎:表 表就是关于特定实体的数据集合。 索引组织表根据主键顺序组织存放——索引组织表 每一张表都有自己的主键,如果没有定义主键,则InnoDB存储引擎会按如下方法选择或创建主键:...
  • daj14
  • daj14
  • 2017-06-01 17:13
  • 82

mysql 学习小札(3)-- 数据的处理

一、mysql数据类型                 1) 数值值           ■ 十六进制的数不区分大小写,但其前缀0x不能为0X,即0x0A...

PHP与MYSQL学习笔记-基础篇3(结构化编程)

PHP结构化编程良好的编程习惯和编程风格会使你的代码更易读,管理和维护都变得及其简单,在PHP中也是这样,我们可以利用许多方法使代码结构化,在本博文中,我将为大家介绍一些最基础的PHP结构化编程方法。...

mysql学习3—修改数据表

删除列:ALTER TABLE tb1_name DROP[COLUMN] col_name; 删除多列:ALTER TABLE tb1_name DROP[COLUMN] col_name1,DR...

搬运自己的mysql学习笔记3-dbutil的使用

dbutils的使用 dbutil是apache组织的一个工具类,是一个jdbc的框架 导入jar包commons-dbutils-1.6.jar 使用方法: 创建一个queryrunner类...

【从零开始学习MySql数据库】(3)函数与子查询和连接查询

#查询语句的基本格式 #select 字段 1 , 字段 2 , 字段 3 , 表达式 , 函数 , ... #from 表名 #where 条件 #group by 列名 #having 带组函数的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)