MySQL学习3
来源:互联网 发布:苹果在线软件下载 编辑:程序博客网 时间:2024/05/16 18:23
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 默认值设为20ALTER TABLE student ADD sage INT DEFAULT 20;
为学生表添加薪水字段ssalary 默认值设为5ALTER 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;
把所有人分数减去20UPDATE 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;
SELECT DISTINCT sage FROM student;
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;
)
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;
左表全保留的情况下,将右表连接上去
SELECT * FROM student LEFT JOIN score ON student.sid = score.sid;4.外右连接(RIGHTJOIN 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, scoreFROM student,scoreWHERE student.sid = score.sid &&score > (SELECT score from score WHERE sid = 2);
打印小于80分的学生姓名思路1SELECT sname FROM student,score WHERE student.sid = score.sid && score < 80;思路2(返回多行单列的子查询)SELECT snameFROM studentWHERE sid IN (SELECT sid from score WHERE score < 80)
练习:打印出考100分的学生的任课老师SELECT teacherFROM lessonWHERE 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,teacherFROM student LEFT JOIN(SELECT sid,teacher,score FROM score,lesson WHERE score.lname = lesson.lname)sl ON student.sid = sl.sid;
0 0
- mysql学习3
- mysql 学习笔记(3)
- mysql学习3
- Mysql学习3
- 3--mysql学习笔记
- mysql学习3-数据类型
- MySQL学习3
- mysql学习 stage1-3
- MySQL学习总结3
- mysql学习之--3、mysql数据类型
- MySQL学习3-小试MySQL
- MySQL学习【3】jdbc操作MySQL
- mysql学习笔记(3)
- MySQL学习系列3:数据类型
- mysql学习笔记(3)
- mysql 数据库学习笔记 3
- MYSQL学习笔记(3)
- mysql学习(3)修改字段
- chrom调试技巧大全,史上最全
- 进制转换之m进制转换成10进制
- UVALive - 3635 - Pie(二分)
- Android官方提供的支持屏幕适配的全部方法
- 代理工具 Charles
- MySQL学习3
- Ubuntu Android Studio Lock to Launcher
- 【蒻爆了的NOIP系列--普及组复赛】(1)NOIP2010普及组复赛题解
- 人民币符号在html的显示方法
- 四种常见的 POST 提交数据方式
- poj 2406 Power Strings-字符串(kmp)
- Java生成html为pdf
- HDU1003 max sum
- Android 4.2 中的Bluetooth 协议栈