2023年6月21日发(作者:)
SQL语⾔⼊门详细教程(更新中)说明:以下所有例题来源于MOOC⽹站但是所有例题的代码是博主⾃⼰码的。本博客最主要还是为了⾃⼰⽇后复习,因此是按照⾃⼰的逻辑编写博客,所以阅读起来有点乱应该属于正常。其中注意的点是:①在编写SQL语⾔的时候建议使⽤⼤写字母,虽然⼩写字母编码同样可以运⾏但是当遇到长语句的时候就会报错,因此为了避免这类情况,尽量开始学习的时候就是⽤⼤写字母进⾏编码。②本博客所有的查询操作是在Navicat 15 for MySQL软件上查看!请⾃⾏百度这是个什么东西,如有需要可私信或者评论。③本博客受众⾯是已经学习过关系模型以及关系运算,想要进⾏SQL语⾔实操的同学。如果数据库课程都没有上过,可以关闭本博客了,因为你看了也看不懂。SQL语⾔基本操作实现创建库以及展⽰库create database database 数据库名;①创建库代码:CREATE DATABASE TEST;运⾏结果:重点:之后的代码运⾏之后出现Query OK,均表⽰运⾏成功。②展⽰库代码: SHOW DATABASES;运⾏结果:可以看到刚刚创建的库test已经创建成功连接数据库:在进⾏数据库操作时,需要连接上你对应操作的库。语句:USE TEST;//后⾯的TEST是库名。运⾏结果:创建表create table简单语法形式:Create table 表名( 列名 数据类型 [Primary key Primary key |Unique |Unique] [Not null][, 列名 数据类型 [Not null] , … ]) ;CREATE TABLE Student(Snumber CHAR(8) NOT NULL,Sname CHAR(10));其中:①:CHAR(8):是表⽰属性S#(即Snumber,其中#⼀般表⽰number)是字符型,占位8;②:NOT NULL:表⽰是否可以为null,这⾥是不可以。运⾏结果:此处可通过SELECT*FROM Student;⾃⾏查看。为表赋值以及浏览表语句:INSERT INTO Student(Snumber,Sname)VALUE(98030102,"李四");//⽅法⼀INSERT INTO Student()VALUE(98030101,"张三");//⽅法⼆INSERT INTO Student(Snumber)VALUE(98030103);//⽅法三⽅法⼀和⽅法⼆效果⼀样。⽅法三是指定属性赋值。其中表后⾯的括号内可以不写任何属性,默认添加全部属性。运⾏过程:在表中显⽰为:此处涉及对表的查看操作:SELECT*FROM Student;重点:如果想要继续看下去并且进⾏实操,请⾃⾏完成以下表格:检索语句:本⼩节之后代码是在软件Navicat 15 for MySQL上完成。所以界⾯有所不同。语句格式:SELECT 列名 FROM 表名 [WHERE 检索条件]//其中[]中的可以省略;简单⽰例例如:①检索学⽣表中所有学⽣的信息可以使⽤:SELECT Snumber,Sname,Ssex,Sage,Dnumber,Sclass FROM student;或者:⽤*代替所有属性SELECT * FROM student;运⾏结果:②:检索学⽣表中所有学⽣的姓名及年龄SELECT Sage FROM student;运⾏结果:③检索学⽣表中所有年龄⼩于等于19岁的学⽣的年龄及姓名SELECT Sage,Sname FROM student WHERE Sage <= 19;运⾏结果:检索条件书写以及结果唯⼀性问题:实例:①检索教师表中所有⼯资少于1500元或者⼯资⼤于2000元 并且是03系的教师姓名?SELECT Tname FROM teacher WHERE (Salary < 1500 OR Salary > 2000 ) AND Dnumber = "03";ps:此处注意括号的使⽤,因为条件语句是有优先级的。运⾏结果:②求或者学过001号课程, 或者学过002号课程的学⽣的学号SELECT Snumber FROM sc WHERE Cnumber = "001" OR Cnumber = "002";SELECT DISTINCT Snumber FROM sc WHERE Cnumber = "001" OR Cnumber = "002";代码的不同如图所⽰:③***求既学过001号课程, ⼜学过002号课程的学⽣的学号?***SELECT r FROM sc AS S1, sc AS S2 WHERE r = "001" AND r = "002";SELECT DISTINCT r FROM sc AS S1, sc AS S2 WHERE r = "001" AND r = "002";PS:第⼀⾏代码存在多个重复值,⼤家学过关系运算应该了解其产⽣原因。若与不懂请查阅笛卡尔积相关资料。
正确的应该是第⼆⾏代码,使⽤DISTINCT⽅法过滤重复值.重复元组被DISTINCT过滤掉,只保留⼀份法⼀法⼆结果排序问题Select语句中结果排序是通过增加order by⼦句实现的:order by order by 列名 [asc | desc]意义为检索结果按指定列名进⾏排序,若后跟asc或省略,则为升序;若后跟desc, 则为降序。实例:①按学号由⼩到⼤(升序)的顺序显⽰出所有学⽣的学号及姓名SELECT Snumber,Sname FROM student ORDER BY Snumber;结果:②检索002号课⼤于80分的所有同学学号并按成绩由⾼到低(降序)顺序显⽰SELECT Snumber,Score FROM sc WHERE Score > 80 ORDER BY Score DESC;为了⽅便显⽰结果,我顺便输出了分数。结果:模糊查询问题实例:①检索所有姓张的学⽣学号及姓名SELECT Sname,Snumber FROM student WHERE Sname LIKE "张%";结果:②检索名字为张某某的所有同学姓名SELECT Sname,Snumber FROM student WHERE Sname LIKE "张__";注意,"张__"有两个下划线结果:null③检索名字不姓张的所有同学姓名SELECT Sname,Snumber FROM student WHERE Sname NOT LIKE "张%";利⽤SQL语⾔进⾏多表联合查询多表联合查询:多表联合检索可以通过连接运算来完成,⽽连接运算⼜可以通过⼴义笛卡尔积后再进⾏选择运算来实现。Select Select 列名 [ [, 列名] … ] From 表名1, 表名2, … Where Where 检索条件 ;
2023年6月21日发(作者:)
SQL语⾔⼊门详细教程(更新中)说明:以下所有例题来源于MOOC⽹站但是所有例题的代码是博主⾃⼰码的。本博客最主要还是为了⾃⼰⽇后复习,因此是按照⾃⼰的逻辑编写博客,所以阅读起来有点乱应该属于正常。其中注意的点是:①在编写SQL语⾔的时候建议使⽤⼤写字母,虽然⼩写字母编码同样可以运⾏但是当遇到长语句的时候就会报错,因此为了避免这类情况,尽量开始学习的时候就是⽤⼤写字母进⾏编码。②本博客所有的查询操作是在Navicat 15 for MySQL软件上查看!请⾃⾏百度这是个什么东西,如有需要可私信或者评论。③本博客受众⾯是已经学习过关系模型以及关系运算,想要进⾏SQL语⾔实操的同学。如果数据库课程都没有上过,可以关闭本博客了,因为你看了也看不懂。SQL语⾔基本操作实现创建库以及展⽰库create database database 数据库名;①创建库代码:CREATE DATABASE TEST;运⾏结果:重点:之后的代码运⾏之后出现Query OK,均表⽰运⾏成功。②展⽰库代码: SHOW DATABASES;运⾏结果:可以看到刚刚创建的库test已经创建成功连接数据库:在进⾏数据库操作时,需要连接上你对应操作的库。语句:USE TEST;//后⾯的TEST是库名。运⾏结果:创建表create table简单语法形式:Create table 表名( 列名 数据类型 [Primary key Primary key |Unique |Unique] [Not null][, 列名 数据类型 [Not null] , … ]) ;CREATE TABLE Student(Snumber CHAR(8) NOT NULL,Sname CHAR(10));其中:①:CHAR(8):是表⽰属性S#(即Snumber,其中#⼀般表⽰number)是字符型,占位8;②:NOT NULL:表⽰是否可以为null,这⾥是不可以。运⾏结果:此处可通过SELECT*FROM Student;⾃⾏查看。为表赋值以及浏览表语句:INSERT INTO Student(Snumber,Sname)VALUE(98030102,"李四");//⽅法⼀INSERT INTO Student()VALUE(98030101,"张三");//⽅法⼆INSERT INTO Student(Snumber)VALUE(98030103);//⽅法三⽅法⼀和⽅法⼆效果⼀样。⽅法三是指定属性赋值。其中表后⾯的括号内可以不写任何属性,默认添加全部属性。运⾏过程:在表中显⽰为:此处涉及对表的查看操作:SELECT*FROM Student;重点:如果想要继续看下去并且进⾏实操,请⾃⾏完成以下表格:检索语句:本⼩节之后代码是在软件Navicat 15 for MySQL上完成。所以界⾯有所不同。语句格式:SELECT 列名 FROM 表名 [WHERE 检索条件]//其中[]中的可以省略;简单⽰例例如:①检索学⽣表中所有学⽣的信息可以使⽤:SELECT Snumber,Sname,Ssex,Sage,Dnumber,Sclass FROM student;或者:⽤*代替所有属性SELECT * FROM student;运⾏结果:②:检索学⽣表中所有学⽣的姓名及年龄SELECT Sage FROM student;运⾏结果:③检索学⽣表中所有年龄⼩于等于19岁的学⽣的年龄及姓名SELECT Sage,Sname FROM student WHERE Sage <= 19;运⾏结果:检索条件书写以及结果唯⼀性问题:实例:①检索教师表中所有⼯资少于1500元或者⼯资⼤于2000元 并且是03系的教师姓名?SELECT Tname FROM teacher WHERE (Salary < 1500 OR Salary > 2000 ) AND Dnumber = "03";ps:此处注意括号的使⽤,因为条件语句是有优先级的。运⾏结果:②求或者学过001号课程, 或者学过002号课程的学⽣的学号SELECT Snumber FROM sc WHERE Cnumber = "001" OR Cnumber = "002";SELECT DISTINCT Snumber FROM sc WHERE Cnumber = "001" OR Cnumber = "002";代码的不同如图所⽰:③***求既学过001号课程, ⼜学过002号课程的学⽣的学号?***SELECT r FROM sc AS S1, sc AS S2 WHERE r = "001" AND r = "002";SELECT DISTINCT r FROM sc AS S1, sc AS S2 WHERE r = "001" AND r = "002";PS:第⼀⾏代码存在多个重复值,⼤家学过关系运算应该了解其产⽣原因。若与不懂请查阅笛卡尔积相关资料。
正确的应该是第⼆⾏代码,使⽤DISTINCT⽅法过滤重复值.重复元组被DISTINCT过滤掉,只保留⼀份法⼀法⼆结果排序问题Select语句中结果排序是通过增加order by⼦句实现的:order by order by 列名 [asc | desc]意义为检索结果按指定列名进⾏排序,若后跟asc或省略,则为升序;若后跟desc, 则为降序。实例:①按学号由⼩到⼤(升序)的顺序显⽰出所有学⽣的学号及姓名SELECT Snumber,Sname FROM student ORDER BY Snumber;结果:②检索002号课⼤于80分的所有同学学号并按成绩由⾼到低(降序)顺序显⽰SELECT Snumber,Score FROM sc WHERE Score > 80 ORDER BY Score DESC;为了⽅便显⽰结果,我顺便输出了分数。结果:模糊查询问题实例:①检索所有姓张的学⽣学号及姓名SELECT Sname,Snumber FROM student WHERE Sname LIKE "张%";结果:②检索名字为张某某的所有同学姓名SELECT Sname,Snumber FROM student WHERE Sname LIKE "张__";注意,"张__"有两个下划线结果:null③检索名字不姓张的所有同学姓名SELECT Sname,Snumber FROM student WHERE Sname NOT LIKE "张%";利⽤SQL语⾔进⾏多表联合查询多表联合查询:多表联合检索可以通过连接运算来完成,⽽连接运算⼜可以通过⼴义笛卡尔积后再进⾏选择运算来实现。Select Select 列名 [ [, 列名] … ] From 表名1, 表名2, … Where Where 检索条件 ;
发布评论