通用SQL数据库查询语句范例
不同数据库类型的通用查询语句
数据库是用来存储和管理数据的系统,而数据库查询语句是用来从数据库中获取所需数据的命令。
不同类型的数据库有不同的查询语句,因此在进行数据库查询时需要根据所使用的数据库类型选择相应的语句。
本文将就不同数据库类型的通用查询语句进行详细介绍,包括关系型数据库(如MySQL、PostgreSQL、SQL Server等)和非关系型数据库(如MongoDB、Cassandra等)。
一、关系型数据库通用查询语句关系型数据库是基于关系模型构建的数据库,常见的有MySQL、PostgreSQL、SQL Server等。
通用的查询语句包括以下几种:1. SELECT语句SELECT语句用于从数据库中选择数据,可以同时选择多个列。
其基本语法如下:```SELECT column1, column2, ...FROM table_nameWHERE condition;```其中,column1, column2为要选择的列名,table_name为数据表名,condition为筛选条件。
2. INSERT语句INSERT语句用于向数据库中插入新的数据记录,其基本语法如下:```INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...);```其中,table_name为数据表名,column1, column2为要插入数据的列名,value1, value2为要插入的值。
3. UPDATE语句UPDATE语句用于更新数据表中的数据记录,其基本语法如下:```UPDATE table_nameSET column1 = value1, column2 = value2, ...WHERE condition;```其中,table_name为数据表名,column1, column2为要更新的列名,value1, value2为要更新的值,condition为更新条件。
SQL语句大全实例
表操作例1 对于表的教学管理数据库中的表STUDENTS ,可以定义如下:CREATE TABLE STUDENTSSNO NUMERIC 6, 0 NOT NULLSNAME CHAR 8 NOT NULLAGE NUMERIC3,0SEX CHAR2BPLACE CHAR20PRIMARY KEYSNO例2 对于表的教学管理数据库中的表ENROLLS ,可以定义如下: CREATE TABLE ENROLLSSNO NUMERIC6,0 NOT NULLCNO CHAR4 NOT NULLGRADE INTPRIMARY KEYSNO,CNOFOREIGN KEYSNO REFERENCES STUDENTSSNOFOREIGN KEYCNO REFERENCES COURSESCNOCHECK GRADE IS NULL OR GRADE BETWEEN 0 AND 100例3 根据表的STUDENTS 表,建立一个只包含学号、姓名、年龄的女学生表;CREATE TABLE GIRLAS SELECT SNO, SNAME, AGEFROM STUDENTSWHERE SEX=' 女';例4 删除教师表TEACHER ;DROP TABLE TEACHER例5 在教师表中增加住址列;ALTER TABLE TEACHERSADD ADDR CHAR50例6 把STUDENTS 表中的BPLACE 列删除,并且把引用BPLACE 列的所有视图和约束也一起删除;ALTER TABLE STUDENTSDROP BPLACE CASCADE例7 补充定义ENROLLS 表的主关键字;ALTER TABLE ENROLLSADD PRIMARY KEY SNO,CNO ;视图操作虚表例9 建立一个只包括教师号、姓名和年龄的视图FACULTY ; 在视图定义中不能包含ORDER BY 子句CREATE VIEW FACULTYAS SELECT TNO, TNAME, AGEFROM TEACHERS例10 从学生表、课程表和选课表中产生一个视图GRADE_TABLE , 它包括学生姓名、课程名和成绩;CREATE VIEW GRADE_TABLEAS SELECT SNAME,CNAME,GRADEFROM STUDENTS,COURSES,ENROLLSWHERE =AND=例11 删除视图GRADE_TABLEDROP VIEW GRADE_TABLE RESTRICT索引操作例12 在学生表中按学号建立索引;CREATE UNIQUE INDEX STON STUDENTS SNO,ASC例13 删除按学号所建立的索引;DROP INDEX ST数据库模式操作例14 创建一个简易教学数据库的数据库模式TEACHING_DB ,属主为ZHANG ;CREATE SCHEMA TEACHING_DB AUTHRIZATION ZHANG例15 删除简易教学数据库模式TEACHING_DB ; 1 选用CASCADE ,即当删除数据库模式时,则本数据库模式和其下属的基本表、视图、索引等全部被删除; 2 选用RESTRICT ,即本数据库模式下属的基本表、视图、索引等事先已清除,才能删除本数据库模式,否则拒绝删除;DROP SCHEMA TEACHING_DB CASCADE单表操作例16 找出 3 个学分的课程号和课程名;SELECT CNO, CNAMEFROM COURSESWHERE CREDIT =3例17 查询年龄大于22 岁的学生情况;SELECTFROM STUDENTSWHERE AGE >22例18 找出籍贯为河北的男生的姓名和年龄;SELECT SNAME, AGEFROM STUDENTSWHERE BPLACE =' 河北' AND SEX =' 男'例19 找出年龄在20 ~23 岁之间的学生的学号、姓名和年龄,并按年龄升序排序; ASC 升序或DESC 降序声明排序的方式,缺省为升序;SELECT SNO, SNAME, AGEFROM STUDENTSWHERE AGE BETWEEN 20 AND 23ORDER BY AGE例20 找出年龄小于23 岁、籍贯是湖南或湖北的学生的姓名和性别;条件比较运算符=、<和逻辑运算符AND 与,此外还可以使用的运算符有:>大于、>=大于等于、<=小于等于、<>不等于、NOT 非、OR 或等;谓词LIKE 只能与字符串联用,常常是“ <列名>LIKE pattern” 的格式;特殊字符“_” 和“%” 作为通配符;谓词IN 表示指定的属性应与后面的集合括号中的值集或某个查询子句的结果中的某个值相匹配,实际上是一系列的OR 或的缩写;谓词NOT IN 表示指定的属性不与后面的集合中的某个值相匹配;谓词BETWEEN 是“ 包含于… 之中” 的意思;SELECT SNAME, SEXFROM STUDENTSWHERE AGE <23 AND BPLACE LIKE' 湖%'或SELECT SNAME, SEXFROM STUDENTSWHERE AGE <23 AND BPLACE IN ' 湖南' , ' 湖北'例22 找出学生表中籍贯是空值的学生的姓名和性别;在SQL 中不能使用条件:<列名>=NULL ;在SQL 中只有一个特殊的查询条件允许查询NULL 值:SELECT SNAME, SEXFROM STUDENTSWHERE BPLACE IS NULL多表操作例23 找出成绩为95 分的学生的姓名;子查询SELECT SNAMEFROM STUDENTSWHERE SNO =SELECT SNOFROM ENROLLSWHERE GRADE =95例24 找出成绩在90 分以上的学生的姓名;SELECT SNAMEFROM STUDENTSWHERE SNO INSELECT SNOFROM ENROLLSWHERE GRADE >90或SELECT SNAMEFROM STUDENTSWHERE SNO =ANYSELECT SNOFROM ENROLLSWHERE GRADE >90例25 查询全部学生的学生名和所学课程号及成绩;连接查询SELECT SNAME, CNO, GRADEFROM STUDENTS, ENROLLSWHERE =例26 找出籍贯为山西或河北,成绩为90 分以上的学生的姓名、籍贯和成绩;当构造多表连接查询命令时,必须遵循两条规则;第一,连接条件数正好比表数少 1 若有三个表,就有两个连接条件;第二,若一个表中的主关键字是由多个列组成,则对此主关键字中的每一个列都要有一个连接条件也有少数例外情况SELECT SNAME, BPLACE, GRADEFROM STUDENTS, ENROLLSWHERE BPLACE IN ‘ 山西’ , ‘ 河北’AND GRADE >=90 AND =例28 查出课程成绩在80 分以上的女学生的姓名、课程名和成绩; FROM 子句中的子查询SELECT SNAME,CNAME, GRADEFROM SELECT SNAME, CNAME , GRADEFROM STUDENTS, ENROLLS,COURSESWHERE SEX =' 女'AS TEMP SNAME, CNAME,GRADEWHERE GRADE >80表达式与函数的使用例29 查询各课程的学时数;算术表达式由算术运算符+、-、、/与列名或数值常量所组成;SELECT CNAME,COURSE_TIME =CREDIT16FROM COURSES例30 找出教师的最小年龄;内部函数:SQL 标准中只使用COUNT 、SUM 、AVG 、MAX 、MIN 函数,称之为聚集函数Set Function ; COUNT 函数的结果是该列统计值的总数目, SUM 函数求该列统计值之和, AVG 函数求该列统计值之平均值, MAX 函数求该列最大值, MIN 函数求该列最小值;SELECT MINAGEFROM TEACHERS例31 统计年龄小于等于22 岁的学生人数;统计SELECT COUNTFROM STUDENTSWHERE AGE < =22例32 找出学生的平均成绩和所学课程门数;SELECT SNO, AVGGRADE, COURSES =COUNTFROM ENROLLSGROUP BY SNO例34 找出年龄超过平均年龄的学生姓名;SELECT SNAMEFROM STUDENTSWHERE AGE >SELECT AVGAGEFROM STUDENTS例35 找出各课程的平均成绩,按课程号分组,且只选择学生超过 3 人的课程的成绩; GROUP BY 与HAVINGGROUP BY 子句把一个表按某一指定列或一些列上的值相等的原则分组,然后再对每组数据进行规定的操作;GROUP BY 子句总是跟在WHERE 子句后面,当WHERE 子句缺省时,它跟在FROM 子句后面;HAVING 子句常用于在计算出聚集之后对行的查询进行控制;SELECT CNO, AVGGRADE, STUDENTS =COUNTFROM ENROLLSGROUP BY CNOHAVING COUNT >= 3相关子查询例37 查询没有选任何课程的学生的学号和姓名;当一个子查询涉及到一个来自外部查询的列时,称为相关子查询Correlated Subquery ;相关子查询要用到存在测试谓词EXISTS 和NOT EXISTS ,以及ALL 、ANY SOME 等;SELECT SNO, SNAMEFROM STUDENTSWHERE NOT EXISTSSELECTFROM ENROLLSWHERE =例38 查询哪些课程只有男生选读;SELECT DISTINCT CNAMEFROM COURSES CWHERE ' 男' =ALLSELECT SEXFROM ENROLLS , STUDENTSWHERE = AND=例39 要求给出一张学生、籍贯列表,该表中的学生的籍贯省份,也是其他一些学生的籍贯省份;SELECT SNAME, BPLACEFROM STUDENTS AWHERE EXISTSSELECTFROM STUDENTS BWHERE = AND< >例40 找出选修了全部课程的学生的姓名;本查询可以改为:查询这样一些学生,没有一门课程是他不选修的;SELECT SNAMEFROM STUDENTSWHERE NOT EXISTSSELECTFROM COURSESWHERE NOT EXISTSSELECTFROM ENROLLSWHERE =AND =关系代数运算例41 设有某商场工作人员的两张表:营业员表SP_SUBORD 和营销经理表SP_MGR ,其关系数据模式如下:SP_SUBORD SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICESP_MGR SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE其中,属性SALPERS_ID 为工作人员的编号, SALPERS_NAME 为工作人员的姓名, MANAGER_ID 为所在部门经理的编号, OFFICE 为工作地点;若查询全部商场工作人员,可以用下面的SQL 语句:SELECT FROM SP_SUBORDUNIONSELECT FROM SP_MGR或等价地用下面的SQL 语句:SELECTFROM TABLE SP_SUBORD UNION TABLE SP_MGR2 INTERSECTSELECT FROM SP_SUBORDINTERSECTSELECT FROM SP_MGR或等价地用下面的SQL 语句:SELECTFROM TABLE SP_SUBORD INTERSECT TABLE SP_MGR或用带ALL 的SQL 语句:SELECT FROM SP_SUBORDINTERSECT ALLSELECT FROM SP_MGR或SELECTFROM TABLE SP_SUBORD INTERSECT ALL TABLE SP_MGR3 EXCEPTSELECT FROM SP_MGREXCEPTSELECT FROM SP_SUBORD或等价地用下面的SQL 语句:SELECTFROM TABLE SP_MGR EXCEPT TABLE SP_ SUBORD或用带ALL 的SQL 语句:EXCEPT ALLSELECT FROM SP_SUBORD例42 查询籍贯为四川、课程成绩在80 分以上的学生信息及其成绩;自然连接SELECT FROM STUDENTSWHERE BPLACE=‘ 四川’NATURAL JOINSELECT FROM ENROLLSWHERE GRADE >=80例列出全部教师的姓名及其任课的课程号、班级;外连接与外部并外连接允许在结果表中保留非匹配元组,空缺部分填以NULL ;外连接的作用是在做连接操作时避免丢失信息;外连接有3 类:1 左外连接Left Outer Join ;连接运算谓词为LEFT OUTER JOIN ,其结果表中保留左关系的所有元组;2 右外连接Right Outer Join ;连接运算谓词为RIGHT OUTER JOIN ,其结果表中保留右关系的所有元组;3 全外连接Full Outer Join ;连接运算谓词为FULL OUTER JOIN ,其结果表中保留左右两关系的所有元组;SELECT TNAME, CNO, CLASSFROM TEACHERS LEFT OUTER JOIN TEACHING USING TNOSQL 的数据操纵例44 把教师李映雪的记录加入到教师表TEACHERS 中;插入INSERT INTO TEACHERSVALUES1476 , ' 李映雪' , 44 , ' 副教授'例45 成绩优秀的学生将留下当教师;INSERT INTO TEACHERS TNO , TNAMESELECT DISTINCT SNO , SNAMEFROM STUDENTS , ENROLLSWHERE =AND GRADE >=90例47 把所有学生的年龄增加一岁;修改UPDATE STUDENTSSET AGE =AGE+1例48 学生张春明在数据库课考试中作弊,该课成绩应作零分计;UPDATE ENROLLSSET GRADE =0WHERE CNO ='C1' AND' 张春明' =SELECT SNAMEFROM STUDENTSWHERE =例49 从教师表中删除年龄已到60 岁的退休教师的数据;删除WHERE AGE >=60SQL 的数据控制例50 授予LILI 有对表STUDENTS 的查询权;表/视图特权的授予一个SQL 特权允许一个被授权者在给定的数据库对象上进行特定的操作;授权操作的数据库对象包括:表/ 视图、列、域等;授权的操作包括:INSERT 、UPDATE 、DELETE 、SELECT 、REFERENCES 、TRIGGER 、UNDER 、USAGE 、EXECUTE 等;其中INSERT 、UPDATE 、DELETE 、SELECT 、REFERENCES 、TRIGGER 有对表做相应操作的权限,故称为表特权;GRANT SELECT ON STUDENTSTO LILIWITH GRANT OPTION例51 取消LILI 的存取STUDENTS 表的特权;REVOKE ALLON STUDENTSFROM LILI CASCADE不断补充中:1. 模糊查找:它判断列值是否与指定的字符串格式相匹配;可用于char、varchar、text、ntext、datetime 和smalldatetime等类型查询;可使用以下通配字符:百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%;下划线_:匹配单个任意字符,它常用来限制表达式的字符长度;方括号:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个;^:其取值也相同,但它要求所匹配对象为指定字符以外的任一个字符;例如:限制以Publishing结尾,使用LIKE '%Publishing'限制以A开头:LIKE 'A%'限制以A开头外:LIKE '^A%'2.更改表格ALTER TABLE table_nameADD COLUMN column_name DATATYPE说明:增加一个栏位没有删除某个栏位的语法;ALTER TABLE table_nameADD PRIMARY KEY column_name说明:更改表得的定义把某个栏位设为主键;ALTER TABLE table_nameDROP PRIMARY KEY column_name说明:把主键的定义删除;by在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集;group by 子句可以将查询结果分组,并返回行的汇总信息Oracle 按照group by 子句中指定的表达式的值分组查询结果;在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数select maxsal,job emp group by job;注意maxsal,job的job并非一定要出现,但有意义查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数;select deptno,sumsal from emp where sal>1200 group by deptno having sumsal>8500 order by deptno;当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组;在一个sql语句中可以有where子句和having子句;having 与where 子句类似,均用于设置限定条件where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行;having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组;查询每个部门的每种职位的雇员数select deptno,job,count from emp group by deptno,job;4.外连接与内连接有时候,即使在连接的表中没有相应的行,用户可能想从一张表中看数据,Oracle提供了外连接实现该功能;内连接是指连接查询只显示完全满足连接条件的记录,即等值连接,外连接的查询结果是内连接查询结果的扩展;外连接不仅返回满足连接条件的所有记录而且也返回了一个表中那些在另一个表中没有匹配行的记录;外连接的操作符是“+”;“+”号放在连接条件中信息不完全的那一边即没有相应行的那一边;运算符“+”影响NULL行的建立;建一行或多行NULL来匹配连接的表中信息完全的行;外连接运算符“+”只能出现在where子句中表达式的一边;假如在多张表之间有多个连接条件,外连接运算符不能使用or,in逻辑运算符与其它条件组合;假如emp表中deptno=10的ename为空值,dept表中deptno=20的loc为空值:1.selectename,,locfromemp,deptwhere+=;如果在中有的数值在中没有值,则在做外连接时,结果中ename会产生一个空值;=102.selectename,,locfromemp,deptwhere=+;如果在中有的数值在中没有值,则在做外连接时,结果中loc会产生一个空值;;=205.自连接自连接是指同一张表的不同行间的连接;该连接不受其他表的影响;用自连接可以比较同一张表中不同行的某一列的值;因为自连接查询仅涉及到某一张表与其自身的连接;所以在from子句中该表名出现两次,分别用两个不同的别名表示,两个别名当作两张不同的表进行处理,与其它的表连接一样,别名之间也使用一个或多个相关的列连接;为了区分同一张表的不同行的列,在名前永别名加以限制;select,managerfromemp worker,emp managerwhere=;6.集合运算基合运算符可以用于从多张表中选择数据;①UNION运算用于求两个结果集合的并集两个结果集合的所有记录,并自动去掉重复行;select ename,sal from account where sal>2000unionselect ename,sal from research where sal>2000unionselect ename,sal from sales where sal>2000;注:ename,sal 是必须一致的;②UNION ALL运算用于求两个结果集合的并集两个结果集中的所有记录,并且不去掉重复行;select ename,sal from account where sal>2000unionselect ename,sal from research where sal>2000unionselect ename,sal from sales where sal>2000;③INTERSECT运算intersect运算返回查询结果中相同的部分;各部门中有哪些相同的职位select Job from accountintersectselect Job from researchintersectselect Job from sales;④MINUS运算minus返回两个结果集的差集;在第一个结果集中存在的,而在第二个结果集中不存在的行; 有那些职位是财务部中有,而在销售部门中没有select Job from accountminusselect Job from sales;。
查看数据表信息的sql语句
查看数据表信息的sql语句SQL语句是结构化查询语言(Structured Query Language)的缩写,是用于查询、操作和管理数据库的语言。
数据库管理系统(DBMS)的用户可以使用SQL语句对数据库进行操作。
在数据库中,表格是最基本的组成单元。
为了查看表格中的信息,需要使用SQL语句。
以下是查看数据表信息的SQL语句:1. 查看表格列信息语法:SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE,COLUMN_DEFAULTFROM INFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME = '表格名称';描述:此语句将显示表格的所有列信息,包括列名称、数据类型、是否允许为NULL和默认值。
2. 查看表格索引信息语法:SHOW INDEXES FROM 表格名称;描述:此语句将显示表格的所有索引信息,包括索引名称、索引类型、列名称和索引顺序。
3. 查看表格大小信息语法:SELECT table_name AS "Table",Round(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)"FROM information_schema.TABLESWHERE table_schema = '数据库名称'AND table_name = '表格名称';描述:此语句将显示表格的大小信息,以MB为单位。
它基于表格的数据长度、索引长度和数据库中表格的位置计算。
以上是SQL语句中最常用的查看数据表信息的语句。
使用SQL语句可以帮助数据库管理人员更轻松地查看表格信息,从而更好地理解和操作数据库。
为了有效地使用这些语句,需要了解SQL 语句和数据库管理系统的基本知识。
通过研究数据库管理系统和SQL 语句,您可以更好地管理您的数据,并提高数据处理的效率。
通用SQL数据库查询语句范例
通⽤SQL数据库查询语句范例通⽤SQL数据库查询语句范例(多表查询)作者:谢作如⼀、简单查询简单的Transact-SQL查询只包括选择列表、FROM⼦句和Where⼦句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下⾯的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
Select nickname,email FROM testtable Where name='张三'(⼀) 选择列表选择列表(select_list)指出所查询列,它可以是⼀组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列例如,下⾯语句显⽰testtable表中所有列的数据: Select * FROM testtable2、选择部分列并指定它们的显⽰次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如: Select nickname,email FROM testtable3、更改列标题在选择列表中,可重新指定列标题。
定义格式为: 列标题=列名 列名列标题如果指定的列标题不是标准的标识符格式时,应使⽤引号定界符,例如,下列语句使⽤汉字显⽰列标题: Select 昵称=nickname,电⼦邮件=email FROM testtable4、删除重复⾏Select语句中使⽤ALL或DISTINCT选项来显⽰表中符合条件的所有⾏或删除其中重复的数据⾏,默认为ALL。
使⽤DISTINCT选项时,对于所有重复的数据⾏在Select返回的结果集合中只保留⼀⾏。
5、限制返回的⾏数使⽤TOP n [PERCENT]选项限制返回的数据⾏数,TOP n说明返回n⾏,⽽TOP n PERCENT时,说明n是表⽰⼀百分数,指定返回的⾏数等于总⾏数的百分之⼏。
例如:Select TOP 2 *FROM testtable Select TOP 20 PERCENT * FROM testtable(⼆) FROM⼦句FROM⼦句指定Select语句查询及与查询相关的表或视图。
sql经典查询语句
sql经典查询语句查询:select * from table1 where ⼯资>2500 and ⼯资<3000 //查找⼀个⼯资区间select 姓名 from table1 where 性别='0' and ⼯资='4000' //查找性别和⼯资的条件select * from table1 where not ⼯资= 3200 //查找⼯资不等于3200的select * from table1 order by ⼯资desc //将⼯资按照降序排列select * from table1 order by ⼯资 asc //将⼯资按照升序排列select * from table1 where year(出⾝⽇期)=1987 //查询table1 中所有出⾝在1987的⼈select * from table1 where name like '%张' /'%张%' /'张%' //查询1,⾸位字‘张’3,尾位字‘张’2,模糊查询select * from table1 order by money desc //查询表1按照⼯资的降序排列表1 (升序为asc)select * from table1 where brithday is null //查询表1 中出⾝⽇期为空的⼈select * into table2 from table3 //将表3中的所有数据转换成表2 (相当于复制)删库和建库use 数据库(aa) //使⽤数据库aacreate bb(数据库) //创建数据库bbcreate table table3 ( name varchar(10),sex varchar(2),money money, brithday datetime) //创建⼀个表3中有姓名,性别,⼯资,出⾝⽇期(此表说明有四列)insert into table3 values ('张三','男','2500','1989-1-5') //在表中添加⼀⾏张三的记录alter table table3 add tilte varchar(10) //向表3 中添加⼀列“title(职位)”alter table table3 drop column sex //删除table3中‘性别’这⼀列drop database aa //删除数据库aadrop table table3 //删除表3delete * from table3 //删除table3 中所有的数据,但table3这个表还在delete from table1 where 姓名='倪涛' and ⽇期 is nulldelete from table1 where 姓名='倪涛' and ⽇期='1971'更改库表的数据update table3 set money=money*1.2 //为表3所有⼈⼯资都增长20%update table3 set money=money*1.2 where title='经理' //为表3中“职位”是经理的⼈⼯资增长20%update table1 set ⼯资= 5000 where 姓名='孙⼋' //将姓名为孙⼋的⼈的⼯资改为5000update table1 set 姓名='敬光' where 姓名='倪涛' and 性别=1 //将性别为男和姓名为倪涛的⼈改为敬光经典查询语句之⼆1显⽰系部编号为03的系部名称Select departname From department Where departno=’03’2.查询系部名称中含有'⼯程'两个字的系部的名称。
mysql多表联合查询sql语句
mysql多表联合查询sql语句当我们需要从多个表中检索数据时,可以使用MySQL的多表联合查询语句。
多表联合查询可以通过使用JOIN子句将多个表连接起来,从而实现在一个查询中检索来自不同表的数据。
以下是一些常见的多表联合查询的SQL语句示例:1. 内连接(INNER JOIN):sql.SELECT.FROM table1。
INNER JOIN table2 ON table1.column_name =table2.column_name;2. 左外连接(LEFT JOIN):sql.SELECT.FROM table1。
LEFT JOIN table2 ON table1.column_name =table2.column_name;3. 右外连接(RIGHT JOIN):sql.SELECT.FROM table1。
RIGHT JOIN table2 ON table1.column_name =table2.column_name;4. 全外连接(FULL JOIN),MySQL不支持全外连接,但可以通过UNION操作符来模拟全外连接的效果。
5. 自连接(Self Join):sql.SELECT e1.employee_id, e1.employee_name,e2.employee_name AS manager.FROM employee e1。
LEFT JOIN employee e2 ON e1.manager_id = e2.employee_id;这些是一些常见的多表联合查询的SQL语句示例,通过这些语句可以实现从多个表中检索数据的目的。
在实际应用中,我们可以根据具体的业务需求和数据关系来选择合适的联合查询方式,以实现我们想要的数据检索和分析。
数据库综合查询的例题及SQL语句
实验三:数据库综合查询一、实验目的1.掌握SELECT语句的基本语法和查询条件表示方法;2.掌握连接查询的表示及使用;3.掌握嵌套查询的表示及使用;二、实验环境已安装SQL Server 2005 企业版的计算机;三、实验内容以数据库原理实验1数据为基础,请使用T-SQL 语句实现进行以下操作:1、查找出employee表中部门相同且住址相同的女员工的姓名、性别、职称、薪水、住址。
select x.emp_name,x.sex,x.title,x.salary,x.addrfrom employee xwhere sex='F'and exists(select*from employee y where y.addr=x.addr and y.sex='F'andy.dept=x.dept and y.emp_no<>x.emp_no);2、检索product 表和sale_item表中相同产品的产品编号、产品名称、数量、单价。
select prod_id,prod_name,qty,unit_pricefrom sale_item,productwhere prod_id=pro_id3、检索product 表和sale_item表中单价高于2400元的相同产品的产品编号、产品名称、数量、单价。
select prod_id,prod_name,qty,unit_pricefrom sale_item,productwhere prod_id=pro_id and unit_price>24004、分别使用左向外连接、右向外连接、完整外部连接检索product 表和sale_item表中单价高于2400元的相同产品的产品编号、产品名称、数量、单价。
并分析比较检索的结果。
select prod_id,prod_name,qty,unit_price from sale_item left outer join product on prod_id=pro_id where unit_price>2400select prod_id,prod_name,qty,unit_price from sale_item right outer join product on prod_id=pro_id where unit_price>2400select prod_id,prod_name,qty,unit_price from sale_item full outer join product on prod_id=pro_id where unit_price>24005、由sales表中查找出销售金额最高的订单。
表中的数据查询 sql 语句
表中的数据查询sql 语句在SQL 中,要根据特定的条件从表中查询数据,你可以使用SELECT 语句。
以下是一个通用的 SQL 查询语句的示例,假设你有一个名为 your_table 的表,并且你想根据特定的条件检索数据:SELECT column1, column2, ...FROM your_tableWHERE condition;在这个模板中:column1, column2, ... 是你想选择的列的名称,如果你想选择所有列,可以使用 * 代替。
your_table 是你的表的名称。
condition 是你要满足的条件。
以下是一些具体的例子:选择所有列和所有行:SELECT *FROM your_table;选择特定列和满足特定条件的行:SELECT column1, column2FROM your_tableWHERE condition;例如:SELECT product_name, priceFROM productsWHERE category = 'Electronics';使用逻辑运算符进行复杂条件查询:SELECT *FROM your_tableWHERE condition1 AND/OR condition2;例如:SELECT customer_name, order_dateFROM ordersWHERE order_date >= '2022-01-01' AND order_date <= '2022-12-31';这些只是简单的示例,具体的查询语句将取决于你的表结构和查询需求。
请根据实际情况进行调整。
常用sql查询语句大全
常用sql查询语句大全常用SQL查询语句大全SQL (Structured Query Language) 是一种用于管理关系型数据库的编程语言,它可以用来从数据库中检索、插入、更新和删除数据。
以下是一些常用的SQL查询语句:1. SELECT语句:用于检索数据库中的数据。
- SELECT * FROM table_name; -- 检索表中的所有列和行- SELECT column1, column2 FROM table_name; -- 检索表中指定的列- SELECT column1, column2 FROM table_name WHERE condition; -- 检索满足条件的行2. INSERT语句:用于向数据库中插入新的数据。
- INSERT INTO table_name (column1, column2) VALUES (value1, value2); -- 插入指定的列和值- INSERT INTO table_name VALUES (value1, value2); -- 插入所有列和值3. UPDATE语句:用于更新数据库中的数据。
- UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition; -- 更新满足条件的行的值4. DELETE语句:用于从数据库中删除数据。
- DELETE FROM table_name WHERE condition; -- 删除满足条件的行5. WHERE子句:用于指定条件。
- SELECT * FROM table_name WHERE column_name = value; -- 检索满足条件的行- SELECT * FROM table_name WHERE column_name LIKE 'value%'; -- 使用通配符进行模糊匹配- SELECT * FROM table_name WHERE column_name IN (value1, value2); -- 检索列值在指定列表中的行6. ORDER BY子句:用于对结果进行排序。
跨数据库查询sql语句
跨数据库查询sql语句1. 跨数据库查询语句示例1:SELECT *FROM database1.table1JOIN database2.table2ON database1.table1.id = database2.table2.id;此语句表示在不同的数据库中的两个表进行连接查询,通过id进行匹配。
2. 跨数据库查询语句示例2:SELECT *FROM database1.table1WHERE database1.table1.id NOT IN(SELECT id FROM database2.table2);此语句表示在database1中查找table1中id不在database2中的表数据。
3. 跨数据库查询语句示例3:SELECT *FROM database1.table1WHERE EXISTS (SELECT * FROM database2.table2 WHERE database1.table1.id = database2.table2.id);此语句表示查询database1中的table1表中与database2中的table2表中id匹配的数据。
4. 跨数据库查询语句示例4:SELECT *FROM database1.table1LEFT JOIN database2.table2ON database1.table1.id = database2.table2.idWHERE database2.table2.id IS NULL;此语句表示在database1中查找table1中与database2中table2表不匹配的数据。
5. 跨数据库查询语句示例5:SELECT *FROM database1.table1WHERE database1.table1.id IN(SELECT id FROM database2.table2 WHERE status = 'active');此语句表示在database1中查找table1中与database2中table2表中状态为'active'的id匹配的数据。
sql查询语句大全及实例
sql查询语句大全及实例1.提取查询(SELECT)SELECT 语句用于从数据库表中提取数据:实例:从"Persons"表中提取数据:SELECT * FROM Persons3.排序(ORDER BY)ORDER BY 语句用于在查询结果中对取出的数据排序:实例:依据金额(Amount)和日期(OrderDate)字段,对"Orders"表中的记录进行从高到低(desc)排序:SELECT * FROM Orders ORDER BY Amount DESC, OrderDate4.过滤(WHERE)WHERE 子句通常用于在 SELECT、UPDATE 和 DELETE 语句中来过滤选择的数据:5.上下文过滤(HAVING)HAVING 子句仅对聚合函数(AVG,COUNT,SUM 等)出现的结果进行过滤:实例:从"Orders"表中选择超过 5000 的订单:SELECT * FROM OrdersHAVING SUM(Amount) > 50006.插入(INSERT)INSERT 语句用于向数据库插入新记录:实例:向"Persons"表中插入一条新记录:INSERT INTO Persons (firstname, lastname, age, address, city)VALUES ('Glenn', 'Quagmire', 33, 'Coolsville', 'Anchorage');7.更新(UPDATE)UPDATE 语句用于更新数据库中的记录:9.创建数据库(CREATE DATABASE)CREATE DATABASE 语句用于创建新的数据库:实例:创建新的数据库“MyDataBase”:CREATE DATABASE MyDataBase实例:在“MyDataBase”中创建一个新表“Persons”:CREATE TABLE Persons(PersonID int,LastName varchar(255),FirstName varchar(255),Address varchar(255),City varchar(255))。
SQL查询语句常用示例
SQL查询语句常⽤⽰例SQL语⾔的应⽤1、找出姓李的读者姓名和所在单位。
2、列出图书库中所有藏书的书名及出版单位。
3、查找⾼等教育出版社的所有图书及单价,结果按单价降序排序。
4、查找价格介于10元和20元之间的图书种类,结果按出版单位和单价升序排序。
5、查找书名以计算机打头的所有图书和作者。
6、检索同时借阅了总编号为112266和449901两本书的借书证号。
7、查找所有借了书的读者的姓名及所在单位。
8、找出李某所借图书的所有图书的书名及借书⽇期。
9、查询1997年10⽉以后借书的读者借书证号、姓名和单位。
10、找出借阅了FoxPro⼤全⼀书的借书证号。
11、找出与赵正义在同⼀天借书的读者姓名、所在单位及借书⽇期。
12、查询1997年7⽉以后没有借书的读者借书证号、姓名及单位。
13、学会利⽤导出的⽅法创建图书管理数据库并完成下⾯SQL⾼级查询:14、求科学出版社图书的最⾼单价、最低单价、平均单价。
15、求信息系当前借阅图书的读者⼈次数。
16、求出各个出版社图书的最⾼价格、最低价格和册数。
17、分别找出各单位当前借阅图书的读者⼈数。
18、找出当前⾄少借阅了2本图书的读者及所在单位。
19、分别找出借书⼈次超过1⼈次的单位及⼈次数。
20、找出藏书中各个出版单位的册数、价值总额。
21、查询经济系是否还清所有图书。
如果还清,显⽰该系所有读者的姓名、所在单位和职称。
1 select姓名,单位from读者where姓名 like '李%'2 select书名,出版单位from图书3 select书名,单价from图书where出版单位 = '⾼等教育出版社' order by 单价 desc4 select分类号from图书where单价 >10 and 单价<20 order by 出版单位,单价5 select书名,作者from图书where书名 like '计算机%'6 select jy1.借书证号from借阅 jy1,借阅 jy2 where jy1.总编号='112266' and jy2.总编号='449901' and jy1.借书证号=jy2.借书证号7 select distinct 姓名,单位from读者,借阅where读者.借书证号=借阅.借书证号8 select distinct 书名,姓名,借书⽇期from读者,借阅,图书where读者.姓名 like '李%' and 读者.借书证号=借阅.借书证号 and 借阅.总编号=图书.总编号9 select distinct 借阅.借书证号,姓名,单位from借阅,读者where借阅.借书⽇期>='1997-10-01' and 借阅.借书证号=读者.借书证号10 select借书证号,书名from借阅,图书where图书.书名='FoxPro⼤全' and 图书.总编号=借阅.总编号11 select姓名,单位,借书⽇期from读者 ,借阅where借阅.借书证号=读者.借书证号 and 借阅.借书⽇期in (select借书⽇期from读者,借阅where读者.姓名='赵正义' and 读者.借书证号=借阅.借书证号)12 select distinct 借阅.借书证号,姓名,单位from借阅,读者where借阅.借书证号=读者.借书证号 and 借阅.借书⽇期<'1997-7-01'13 select出版单位, Max(单价)最⾼单价,Min(单价)最低单价,Avg(单价)平均单价from图书where出版单位='科学出版社'group by 出版单位14 select count(DISTINCT 借阅.借书证号)⼈数from读者,借阅where读者.单位='信息系' and 读者.借书证号=借阅.借书证号15 select出版单位, Max(单价)最⾼价格,Min(单价)最低价格,count(出版单位)册数from图书 group by 出版单位 order by count(出版单位)16 select单位,count(*)⼈数from读者,借阅where读者.借书证号=借阅.借书证号 group by 读者.单位17 select单位,count(*)⼈数from读者where读者.借书证号in (select借书证号from借阅) group by 单位18 select姓名,单位from读者,借阅where读者.借书证号=借阅.借书证号 group by 姓名,单位 Having count(借阅.借书证号) >=219 select单位,count(*)次数from读者where读者.借书证号in (select借书证号from借阅 ) group by 单位 Having count(*)>120 select出版单位,count(出版单位)册数 ,sum(单价)总价from图书 group by 出版单位21 if exists (select读者.借书证号from读者,借阅where读者.单位='经济系' and 读者.借书证号=借阅.借书证号) select'0'else select姓名,单位,职称from读者where读者. 单位='经济系'。
SQL的基本查询语句大全
SQL(结构化查询语言)是用于管理关系数据库系统的标准语言。
以下是一些基本的SQL查询语句的示例:1. **选择所有列**```sqlSELECT * FROM 表名;```2. **选择特定列**```sqlSELECT 列名1, 列名2 FROM 表名;```3. **添加条件**```sqlSELECT * FROM 表名WHERE 条件;```4. **排序结果**```sqlSELECT * FROM 表名ORDER BY 列名ASC/DESC;```5. **插入数据**```sqlINSERT INTO 表名(列名1, 列名2, ...) VALUES (值1, 值2, ...);```6. **更新数据**```sqlUPDATE 表名SET 列名1 = 值1, 列名2 = 值2, ... WHERE 条件; ```7. **删除数据**```sqlDELETE FROM 表名WHERE 条件;```8. **连接表**```sqlSELECT * FROM 表名1 JOIN 表名2 ON 表名1.列名= 表名2.列名; ```9. **聚合函数**```sqlSELECT COUNT(列名) FROM 表名WHERE 条件; --计数SELECT SUM(列名) FROM 表名WHERE 条件; --求和SELECT AVG(列名) FROM 表名WHERE 条件; --平均值SELECT MAX(列名) FROM 表名WHERE 条件; --最大值SELECT MIN(列名) FROM 表名WHERE 条件; --最小值```10. **分组和筛选**```sqlSELECT 列名, COUNT(*) FROM 表名GROUP BY 列名HAVING COUNT(*) > 值; --分组和筛选聚合数据```11. **子查询**```sqlSELECT * FROM 表名WHERE 列名IN (SELECT 列名FROM 表名WHERE 条件); -- IN 子查询SELECT * FROM 表名WHERE 列名= (SELECT 列名FROM 表名WHERE 条件); -- = 子查询(通常用于单行子查询)```12. **插入多行数据** (在某些数据库中可能不支持)```sqlINSERT INTO 表名(列名1, 列名2, ...) VALUES (值1a, 值2a, ...), (值1b, 值2b, ...), ...;```请注意,上述SQL语句仅为基本示例,实际使用时可能需要根据具体的数据库系统和需求进行调整。
sql的select语句
sql的select语句SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准语言。
在SQL中,SELECT语句用于从数据库中检索数据。
以下是10个符合要求的SELECT语句的例子,每个例子都附有详细的解释。
1. 查询所有员工的姓名和工资:```SELECT 姓名, 工资 FROM 员工表;```这条语句将返回员工表中所有员工的姓名和工资。
2. 查询员工表中薪资大于5000的员工的姓名和工资:```SELECT 姓名, 工资 FROM 员工表 WHERE 工资 > 5000;```这条语句将返回员工表中薪资大于5000的员工的姓名和工资。
3. 查询员工表中姓氏为“王”的员工的姓名和年龄:```SELECT 姓名, 年龄 FROM 员工表 WHERE 姓名 LIKE '王%';```这条语句将返回员工表中姓氏为“王”的员工的姓名和年龄。
使用LIKE关键字和通配符 % 来模糊匹配姓氏。
4. 查询员工表中年龄在25到35之间的员工的姓名和工资:```SELECT 姓名, 工资FROM 员工表WHERE 年龄BETWEEN 25 AND 35;```这条语句将返回员工表中年龄在25到35之间的员工的姓名和工资。
使用BETWEEN关键字来指定范围。
5. 查询员工表中工资最高的员工的姓名和工资:```SELECT 姓名, 工资 FROM 员工表 ORDER BY 工资 DESC LIMIT 1; ```这条语句将返回员工表中工资最高的员工的姓名和工资。
使用ORDER BY关键字按工资降序排序,并使用LIMIT关键字限制结果只返回一行。
6. 查询员工表中没有分配部门的员工的姓名和工资:```SELECT 姓名, 工资 FROM 员工表 WHERE 部门 IS NULL;```这条语句将返回员工表中没有分配部门的员工的姓名和工资。
使用IS NULL关键字来判断某个字段是否为空。
数据库查询操作实例
数据库查询操作实例数据库查询是一项非常常见和重要的操作,用于从数据库中检索所需的数据。
下面是一些数据库查询操作的实例:1.简单查询:从数据库表中选择所有的数据sqlSELECT*FROM表名;2.条件查询:根据特定条件过滤数据sqlSELECT*FROM表名WHERE条件;例如,从名为`students`的表中选择所有年龄大于18岁的学生记录:sqlSELECT*FROMstudentsWHEREage>18;3.查询特定字段:只选择所需的字段,而不是全部字段sqlSELECT列1,列2FROM表名;例如,从名为`employees`的表中选择员工的姓名和工资:sqlSELECTname,salaryFROMemployees;4.查询结果排序:根据特定的列对结果进行排序sqlSELECT*FROM表名ORDERBY列名ASC/DESC;例如,从名为`products`的表中选择所有产品记录,并按价格降序排列:sqlSELECT*FROMproductsORDERBYpriceDESC;5.分组查询:根据特定的列对数据进行分组sqlSELECT列1,列2,聚合函数FROM表名GROUPBY列1,列2;例如,从名为`orders`的表中按客户ID分组,并计算每个客户总的订单数量:sqlSELECTcustomer_id,COUNT(*)FROMordersGROUPB Ycustomer_id;6.连接查询:将多个表的数据联合在一起查询sqlSELECT列1,列2FROM表1INNERJOIN表2ON表1.列=表2.列;例如,从名为`orders`和`customers`的表中选择订单信息,并显示对应的客户姓名:sqlSELECTorders.order_id,FROMordersINNERJOINcustomersONorders.customer_id=custo mers.customer_id;以上是一些常见的数据库查询操作的实例。
SQL条件查询语句
..SQL查询语句第一次:条件、排序、生成表、通配符、文件(记事本)、数组、临时表、数学函数、分组、嵌套查询第二次:插入记录、删除记录、更新记录第三次:超连接、新建(打开)数据库、表的建立、表的删除、表结构的修改格式:1、查询(显示)记录Select字段名列表(*) from表名;where条件表达式;into table(dbf)文件名;into cursor 临时表名;into array 数组名;to file 文件名;order by字段名列表(asc desc);group by 字段名having条件;显示同E4挣同样工资的职工信息Select * from 职工where 工资=(select 工资from 职工where 职工号=”E4”)职工(仓库号C(10),职工号C(10),工资N(10,2)) select * from 职工where 职工号!="E4" AND 工资=(select 工资from 职工where 职工号="E4")显示所有工资大于1500的员工的仓库号、职工号及所在的城市2、插入记录Insert into表名(字段名列表) values(记录值)3、删除记录Delete from表名where条件4、更新记录Update 表名set 字段名=记录值;Where 条件5、表的删除6、表的建立7、表结构的修改alter table 表名1)增加字段alter table student add 身份证号c(10)2)删除字段alter table student drop colum 身份证号3)修改字段名alter table student rename colum 出生日期to 出生年月4)增加字段有效性规则alter table student alter 成绩set check 成绩>=0 and 成绩<=100;error "成绩输入错误,成绩应该在0-100之间"5)删除字段有效性规则alter table student alter 成绩drop check 注意:对两个表操作的方法:1)同时打开两个表select 仓库.仓库号,城市,职工号,工资from 仓库,职工;where 职工.仓库号=仓库.仓库号and 工资=12502)超连接(内连接、左连接、右连接、全连接)内连接:只显示符合条件的记录左连接:显示符合条件的记录及第一个表中不符合条件的记录右连接:显示符合条件的记录及第二个表中不符合条件的记录全连接:显示符合条件的记录及第一、二个表中不符合条件的记录成绩表(score)学号姓名课程名成绩2001 张三计算机102003 张四英语202001 张三语言302005 张三数据402003 张四计算机50 Select sum(成绩) from score group by 学号Select sum(成绩) from score group by 课程名。
SQL SEVER数据库查询语句篇
关系代数:1.在数据库ScoreDB中,查找所有1992年及以后出生的女学生情况σyear(birthday)>=1992∧sex='女'(Student)2.在数据库ScoreDB中,查找所有“蒙古族”学生的姓名和籍贯∏studentName, native(σnation=‘蒙古族’(Student))3.在数据库ScoreDB中,查找所有2008级的“蒙古族”学生的姓名∏studentName(σnation=…蒙古族‟(Student) ⋈σgrade=2008(Class))=∏studentName(σStudent.classNo=Class.classNo(σnation='蒙古族'(Student)×σgrade=2008(Class)))=∏studentName(σStudent.classNo=Class.classNo(σnation='蒙古族'∧grade=2008(Student×Class)))=∏studentName(σnation='蒙古族'∧grade=2008∧Student.classNo=Class.classNo(Student×Class))=∏studentName(σnation='蒙古族'∧grade=2008(σStudent.classNo=Class.classNo(Student×Class)))=∏studentName(σnation='蒙古族'∧grade=2008(Student ⋈Class))SQL语言: 1.查询所有班级的全部信息。
SELECT classNo, className, classNum, grade, institute /SELECT *FROM ClassWHERE grade=20072.在学生Student表中查询籍贯不是“南昌”或“上海”的同学姓名、籍贯和所属班级编号。
50条SQL查询技巧、查询语句示例
50条SQL查询技巧、查询语句⽰例Student(S#,Sname,Sage,Ssex) 学⽣表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程⽐“002”课程成绩⾼的所有学⽣的学号;复制代码代码如下:select a.S# from (select s#,score from SC where C#='001') a,(select s#,scorefrom SC where C#='002') bwhere a.score>b.score and a.s#=b.s#;2、查询平均成绩⼤于60分的同学的学号和平均成绩;复制代码代码如下:select S#,avg(score)from scgroup by S# having avg(score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;复制代码代码如下:select Student.S#,Student.Sname,count(SC.C#),sum(score)from Student left Outer join SC on Student.S#=SC.S#group by Student.S#,Sname4、查询姓“李”的⽼师的个数;复制代码代码如下:select count(distinct(Tname))from Teacherwhere Tname like '李%';5、查询没学过“叶平”⽼师课的同学的学号、姓名;复制代码代码如下:select Student.S#,Student.Snamefrom Studentwhere S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;复制代码代码如下:select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');7、查询学过“叶平”⽼师所教的所有课的同学的学号、姓名;复制代码代码如下:select S#,Snamefrom Studentwhere S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# andTeacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher whereTeacher.T#=Course.T# and Tname='叶平'));8、查询课程编号“002”的成绩⽐课程编号“001”课程低的所有同学的学号、姓名;Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;9、查询所有课程成绩⼩于60分的同学的学号、姓名;复制代码代码如下:select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);10、查询没有学全所有课的同学的学号、姓名;复制代码代码如下:select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);11、查询⾄少有⼀门课与学号为“1001”的同学所学相同的同学的学号和姓名;复制代码代码如下:select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';12、查询⾄少学过学号为“001”同学所有⼀门课的其他同学学号和姓名;复制代码代码如下:select distinct SC.S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC where S#='001');13、把“SC”表中“叶平”⽼师教的课的成绩都更改为此课程的平均成绩;复制代码代码如下:update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# andTeacher.Tname='叶平');14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;复制代码代码如下:select S# from SC where C# in (select C# from SC where S#='1002')group by S# having count(*)=(select count(*) from SC where S#='1002');15、删除学习“叶平”⽼师课的SC表记录;复制代码代码如下:Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';16、向SC表中插⼊⼀些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;复制代码代码如下:Insert SC select S#,'002',(Select avg(score)from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');17、按平均成绩从⾼到低显⽰所有学⽣的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显⽰:学⽣ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT S# as 学⽣ID,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩FROM SC AS tGROUP BY S#ORDER BY avg(t.score)18、查询各科成绩最⾼和最低的分:以如下形式显⽰:课程ID,最⾼分,最低分复制代码代码如下:SELECT L.C# As 课程ID,L.score AS 最⾼分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.C# = R.C# andL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.C# = IL.C# and IM.S#=IL.S#GROUP BY IL.C#)ANDR.Score = (SELECT MIN(IR.score)FROM SC AS IRWHERE R.C# = IR.C#GROUP BY IR.C#);19、按各科平均成绩从低到⾼和及格率的百分数从⾼到低顺序复制代码代码如下:SELECT t.C# AS 课程号,max(ame)AS 课程名,isnull(AVG(score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM SC T,Coursewhere t.C#=course.C#GROUP BY t.C#ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC20、查询如下课程平均成绩和及格率的百分数(⽤"1⾏"显⽰): 企业管理(001),马克思(002),OO&UML (003),数据库(004)复制代码代码如下:SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM SC21、查询不同⽼师所教不同课程平均分从⾼到低显⽰复制代码代码如下:SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere T.C#=C.C# and C.T#=Z.T#GROUP BY C.C#ORDER BY AVG(Score) DESC22、查询如下课程成绩第 3 名到第 6 名的学⽣成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学⽣ID],[学⽣姓名],企业管理,马克思,UML,数据库,平均成绩复制代码代码如下:SELECT DISTINCT top 3SC.S# As 学⽣学号,Student.Sname AS 学⽣姓名 ,T1.score AS 企业管理,T2.score AS 马克思,T3.score AS UML,T4.score AS 数据库,ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分FROM Student,SC LEFT JOIN SC AS T1ON SC.S# = T1.S# AND T1.C# = '001'LEFT JOIN SC AS T2ON SC.S# = T2.S# AND T2.C# = '002'LEFT JOIN SC AS T3ON SC.S# = T3.S# AND T3.C# = '003'LEFT JOIN SC AS T4ON SC.S# = T4.S# AND T4.C# = '004'WHERE student.S#=SC.S# andISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)NOT IN(SELECTDISTINCTTOP 15 WITH TIESISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)FROM scLEFT JOIN sc AS T1ON sc.S# = T1.S# AND T1.C# = 'k1'LEFT JOIN sc AS T2ON sc.S# = T2.S# AND T2.C# = 'k2'LEFT JOIN sc AS T3ON sc.S# = T3.S# AND T3.C# = 'k3'LEFT JOIN sc AS T4ON sc.S# = T4.S# AND T4.C# = 'k4'ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);23、统计列印各科成绩,各分数段⼈数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]复制代码代码如下:SELECT SC.C# as 课程ID, Cname as 课程名称,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85],SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]FROM SC,Coursewhere SC.C#=Course.C#GROUP BY SC.C#,Cname;24、查询学⽣平均成绩及其名次复制代码代码如下:SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT S#,AVG(score) AS 平均成绩FROM SCGROUP BY S#) AS T1WHERE 平均成绩 > T2.平均成绩) as 名次,S# as 学⽣学号,平均成绩FROM (SELECT S#,AVG(score) 平均成绩FROM SCGROUP BY S#) AS T2ORDER BY 平均成绩 desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)复制代码代码如下:SELECT t1.S# as 学⽣ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 3 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;26、查询每门课程被选修的学⽣数复制代码代码如下:select c#,count(S#) from sc group by C#;27、查询出只选修了⼀门课程的全部学⽣的学号和姓名复制代码代码如下:select SC.S#,Student.Sname,count(C#) AS 选课数from SC ,Studentwhere SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;28、查询男⽣、⼥⽣⼈数复制代码代码如下:Select count(Ssex) as 男⽣⼈数 from Student group by Ssex having Ssex='男'; Select count(Ssex) as ⼥⽣⼈数 from Student group by Ssex having Ssex='⼥';29、查询姓“张”的学⽣名单复制代码代码如下:SELECT Sname FROM Student WHERE Sname like '张%';30、查询同名同性学⽣名单,并统计同名⼈数复制代码代码如下:select Sname,count(*) from Student group by Sname having count(*)>1;31、1981年出⽣的学⽣名单(注:Student表中Sage列的类型是datetime)复制代码代码如下:select Sname, CONVERT(char (11),DATEPART(year,Sage)) as agefrom studentwhere CONVERT(char(11),DATEPART(year,Sage))='1981';32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列复制代码代码如下:Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;33、查询平均成绩⼤于85的所有学⽣的学号、姓名和平均成绩复制代码代码如下:select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;34、查询课程名称为“数据库”,且分数低于60的学⽣姓名和分数复制代码代码如下:Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <60;35、查询所有学⽣的选课情况;复制代码代码如下:SELECT SC.S#,SC.C#,Sname,CnameFROM SC,Student,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# ;36、查询任何⼀门课程成绩在70分以上的姓名、课程名称和分数;复制代码代码如下:SELECT distinct student.S#,student.Sname,SC.C#,SC.scoreFROM student,ScWHERE SC.score>=70 AND SC.S#=student.S#;37、查询不及格的课程,并按课程号从⼤到⼩排列复制代码代码如下:select c# from sc where scor e <60 order by C# ;38、查询课程编号为003且课程成绩在80分以上的学⽣的学号和姓名;复制代码代码如下:select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';39、求选了课程的学⽣⼈数复制代码代码如下:select count(*) from sc;40、查询选修“叶平”⽼师所授课程的学⽣中,成绩最⾼的学⽣姓名及其成绩复制代码代码如下:select Student.Sname,scorefrom Student,SC,Course C,Teacherwhere Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );41、查询各个课程及相应的选修⼈数复制代码代码如下:select count(*) from sc group by C#;42、查询不同课程成绩相同的学⽣的学号、课程号、学⽣成绩复制代码代码如下:select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;43、查询每门功成绩最好的前两名复制代码代码如下:SELECT t1.S# as 学⽣ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;44、统计每门课程的学⽣选修⼈数(超过10⼈的课程才统计)。
sql常用查询语句格式及例子说明
SQL常用查询语句格式及例子说明1.概述本文将介绍S Q L中常用的查询语句格式,并通过具体的例子进行说明。
通过学习本文,您将能够掌握SQ L中常用查询语句的写法和应用场景。
2.查询单个表2.1选择特定列查询特定列的语法格式如下:S E LE CT co lu mn1,col u mn2,...F R OM ta bl e_na me;示例:S E LE CT id,n am e,ageF R OM st ud en ts;2.2查询所有列查询表中所有列的语法格式如下:S E LE CT*F R OM ta bl e_na me;示例:S E LE CT*F R OM st ud en ts;2.3带条件的查询带条件的查询的语法格式如下:S E LE CT co lu mn1,col u mn2,...F R OM ta bl e_na meW H ER Ec on di ti on;示例:S E LE CT id,n am e,ageF R OM st ud en tsW H ER Ea ge>20;3.查询多个表3.1内连接查询内连接查询的语法格式如下:S E LE CT*F R OM ta bl e1I N NE RJ OI Nt ab le2O N ta bl e1.c ol um n_n a me=t ab le2.co lum n_n am e;示例:S E LE CT st ud en ts.id,st ud en ts.n am e,d e pa rt me nt s.na meF R OM st ud en tsI N NE RJ OI Nd ep ar tme n tsO N st ud en ts.d ep art m en t_id=d ep ar tme n ts.i d;3.2左连接查询左连接查询的语法格式如下:S E LE CT*F R OM ta bl e1L E FT JO IN ta bl e2O N ta bl e1.c ol um n_n a me=t ab le2.co lum n_n am e;示例:S E LE CT st ud en ts.id,st ud en ts.n am e,d e pa rt me nt s.na meF R OM st ud en tsL E FT JO IN de pa rt men t sO N st ud en ts.d ep art m en t_id=d ep ar tme n ts.i d;3.3右连接查询右连接查询的语法格式如下:S E LE CT*F R OM ta bl e1R I GH TJ OI Nt ab le2O N ta bl e1.c ol um n_n a me=t ab le2.co lum n_n am e;示例:S E LE CT st ud en ts.id,st ud en ts.n am e,d e pa rt me nt s.na meF R OM st ud en tsR I GH TJ OI Nd ep ar tme n tsO N st ud en ts.d ep art m en t_id=d ep ar tme n ts.i d;4.排序和限制结果4.1排序查询结果排序查询结果的语法格式如下:S E LE CT*F R OM ta bl e_na meO R DE RB Yc ol um n_nam e[A SC|D ES C];示例:S E LE CT id,n am e,ageF R OM st ud en tsO R DE RB Ya ge DE SC;4.2限制结果数量限制结果数量的语法格式如下:S E LE CT*F R OM ta bl e_na meL I MI Tn um be r;示例:S E LE CT*F R OM st ud en tsL I MI T10;5.分组查询5.1分组聚合查询分组聚合查询的语法格式如下:S E LE CT co lu mn1,agg r eg at e_fu nc ti on(c ol um n2)F R OM ta bl e_na meG R OU PB Yc ol um n1;示例:S E LE CT de pa rt me nt_i d,CO UN T(id)F R OM st ud en tsG R OU PB Yd ep ar tm ent_id;6.结论本文介绍了S Q L常用的查询语句格式,并通过具体的例子进行了说明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通用SQL数据库查询语句范例(多表查询)
弱电学院---文章分类: 电脑→数据库∧上一篇∨下一篇◎最新发布列表...
双击自动滚屏发布者:弱电之家发布时间:2008-10-6 17:53:
00 来源:互联网
总阅读:1351次本周阅读:31次今日阅读:4
次
推荐一、简单查询
简单的Transact-SQL查询只包括选择列表、FROM子句和Where子句。
它们分别说明所查询列、查询的表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email 字段。
Select nickname,email
FROM testtable
Where name=’张三’
(一) 选择列表
选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。
1、选择所有列
例如,下面语句显示testtable表中所有列的数据:
Select *
FROM testtable
2、选择部分列并指定它们的显示次序
查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
例如:
Select nickname,email
FROM testtable
3、更改列标题
在选择列表中,可重新指定列标题。
定义格式为:
列标题=列名
列名列标题
如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:
Select 昵称=nickname,电子邮件=email
FROM testtable
4、删除重复行
Select语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。
使用DISTINCT选项时,对于所有重复的数据行在Select返回的结果集合中只保留一行。
5、限制返回的行数
使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TO P n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
例如:
Select TOP 2 *FROM testtable Select TOP 20 PERCENT * FROM testtabl e
(二) FROM子句
FROM子句指定Select语句查询及与查询相关的表或视图。
在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。
例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:。