MySQL学习3

来源:互联网 发布:苹果在线软件下载 编辑:程序博客网 时间:2024/06/05 17:29

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;


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.外右连接(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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胸肌正面不明显侧面看才有怎么办 小孩胸肌骨突出外翻怎么办 衣柜隔层板坏了怎么办 科三路线记不住怎么办 喂奶以后胸变小了怎么办 健身完肩膀缝疼怎么办 生过孩子胯部宽怎么办 无肩带文胸往下滑怎么办 内衣肩带老是往下滑怎么办 乳房发育一边大一边小怎么办 母猫乳房有硬块怎么办 19岁乳晕很大乳头很小怎么办 做完俯卧撑胳膊特别痛怎么办 电压低风扇转不动怎么办 小孩不配合康复锻炼怎么办 跑步机安全开关脱落怎么办 办健身卡贵了怎么办 跑步机安全锁丢了怎么办 老公的腿老是疼怎么办 跑步机钥匙丢了怎么办 跑步机磁铁丢了怎么办 瑜伽拉筋拉伤了怎么办康复 大腿拉筋拉伤了怎么办 肚子饿的咕咕叫怎么办 手表折叠扣松了怎么办? 手表链扣松了怎么办? 原车挡泥板碎了怎么办 车检通不过的车怎么办 车子被轻微刮了怎么办 车龙门架弯了怎么办 材料合格工地非说不合格怎么办 汽车翼子板撞过弄好缝隙大怎么办 手表秒针摔掉了怎么办 元征升降机泄压怎么办 自拍杆的杆子往下下滑怎么办 小狗被车压了一下拉血怎么办 有鬼给你磕头让你不好怎么办 腿又粗又短怎么办 腿又短又粗怎么办 因跑步小腿变粗怎么办 健身后小腿变粗怎么办