1. 有一张表t_stu;其中三个字段:name,gender,grade;要求用一条sql语句查出男生前5名和女生前五名。
这里使用postgreSQL数据库
-- Create the table
CREATE TABLE
intense.t_stu
(
id NUMERIC(24),
name CHARACTER VARYING(20),
gender NUMERIC(1),
grade NUMERIC(4)
);
-- Truncate the table
truncate table intense.t_stu;
-- Insert data
insert into intense.t_stu values(1,'John',1,93);
insert into intense.t_stu values(2,'Lisa',0,94);
insert into intense.t_stu values(3,'John2',1,83);
insert into intense.t_stu values(4,'Lisa2',0,84);
insert into intense.t_stu values(5,'John3',1,73);
insert into intense.t_stu values(6,'Lisa3',0,74);
insert into intense.t_stu values(7,'John4',1,63);
insert into intense.t_stu values(8,'Lisa4',0,64);
insert into intense.t_stu values(9,'John5',1,53);
insert into intense.t_stu values(10,'Lisa5',0,54);
insert into intense.t_stu values(11,'John6',1,103);
insert into intense.t_stu values(12,'Lisa6',0,104);
-- Get the data needed
SELECT
*
FROM
intense.t_stu a
WHERE
(
SELECT
COUNT(*)
FROM
intense.t_stu
WHERE
gender=a.gender
AND grade > a.grade) < 5
ORDER BY
a.grade DESC
a表按照grade由高到低排列,并和t_stu连接,条件是gender相等并且grade大于a表的grade(返回10条记录,count=4略去):
如果不考虑gender,只求前5名:
select * from intense.t_stu a where (select count(*) from intense.t_stu where grade > a.grade) < 5 order by a.grade desc
2. 有一张表t_game,记录了游戏玩家的id,游戏玩家名name,和每个玩家玩的游戏game,请找出玩游戏最多的那个玩家。
-- Create the table
CREATE TABLE intense.t_game(
id numeric(24),
name character varying(20),
game character varying(20)
);
-- Truncate the table
truncate table intense.t_game;
-- Insert data
insert into intense.t_game values(1,'John','game');
insert into intense.t_game values(2,'Lisa','game2');
insert into intense.t_game values(3,'Jack','game3');
insert into intense.t_game values(4,'Jim','game4');
insert into intense.t_game values(3,'Jack','game5');
insert into intense.t_game values(5,'Eric','game6');
insert into intense.t_game values(1,'John','game7');
insert into intense.t_game values(3,'Jack','game8');
insert into intense.t_game values(6,'Nicolas','game9');
-- Get the data needed
-- MySQL, postgreSQL
SELECT
id,
name
FROM
intense.t_game
GROUP BY
id,
name
ORDER BY
COUNT(*) DESC LIMIT 1
-- SQL Server
SELECT
TOP 1 id,
name
FROM
intense.t_game
GROUP BY
id,
name
ORDER BY
COUNT(*) DESC
-- Oracle
3. CASE WHEN 示例:
-- CASE后面跟字段
SELECT
(
CASE account
WHEN 1
THEN 0.5
WHEN 0
THEN 0
ELSE FLOAT(account)
END) AS account_val
FROM
tb_account;
-- 如果判断表达式比较复杂,把字段放到每个判断表达式中
SELECT
(
CASE
WHEN account IS NULL
THEN 0
WHEN account > 0
THEN FLOAT(account)
ELSE -1
END) AS account_val
FROM
tb_account;
注:这里的float函数是DB2数据库支持的,其它数据库请改成相应的函数。
4. 同步两个表中的某些字段:
表连接关键字(LEFT JOIN, INNER JOIN, RIGHT JOIN等)常常用于查询语句,其实也可以用于更新和删除语句:
在DB2和Oracle上:
UPDATE
tableB b
SET
(
COL_1, COL_2, COL3
)
=
(
SELECT
COL_4, COL_5, COL_6
FROM
tableA a
WHERE
a.ID = b.ID)
WHERE -- WHERE能限定范围,提高性能;如果数据量较大,需要给两张表的连接字段加上索引
ID IN
(
SELECT
ID
FROM
tableA a
WHERE
a.ID = b.ID)
如果tableA中有重复的记录,会导致更新失败,因为数据库不知道该更新为哪个值:
解决思路:限定匹配值只有一个:
-- DB2
UPDATE
tableB b
SET
(
COL_1, COL_2, COL3
)
=
(
SELECT
COL_4, COL_5, COL_6
FROM
tableA a
WHERE
a.ID = b.ID ORDER BY CREATE_TIME DESC FETCH FIRST 1 ROWS ONLY)
ID IN
(
SELECT
ID
FROM
tableA a
WHERE
a.ID = b.ID)
SQL Server上:
UPDATE
b
SET
COL_1=a.COL_4,
COL_2=a.COL_5,
COL_3=a.COL_6
FROM
tableA a
LEFT JOIN
tableB b
ON
a.ID = b.ID
-- 也可以写成:
UPDATE
b
SET
COL_1=a.COL_4,
COL_2=a.COL_5,
COL_3=a.COL_6
FROM
tableA a,
tableB b
WHERE
a.ID = b.ID
- 大小: 49.5 KB
- 大小: 34 KB
分享到:
相关推荐
例如,使用 exec 语句可以执行动态生成的 SQL 语句,例如: exec('select * from tableName') 使用 exec 语句执行动态 SQL 语句 使用 exec 语句可以执行动态生成的 SQL 语句,例如: declare @s varchar(1000) ...
使用SQL语句生成器,你可以: 1. **快速创建查询**:只需选择所需表和字段,工具就能生成相应的SELECT语句,节省了编写时间。 2. **智能提示和补全**:许多生成器提供了自动补全功能,有助于快速输入SQL关键字和...
4、灵活运用SQL语句使用计算列。在进行审计数据分析和查询时经常需要对查询的数据进行再计算,这里审计人员可充分运用SELECT语句的功能来直接使用计算列对审计数据进行运算,而计算列并不存在于表格所存储的数据中,...
Mysql高级sql语句使用.md
sql语句sql语句sql语句sql语句sql语句
在`SqlExecutor<T>`类中,我们可以使用反射来动态构建SQL语句,根据实体类`T`的属性生成对应的INSERT、UPDATE、DELETE等SQL语句。例如,对于INSERT操作,我们可以遍历`T`的所有公开属性,生成`SET`子句,然后结合...
在使用这个工具时,开发者需要确保源代码中的SQL语句是标准的Oracle SQL格式,避免使用特定Oracle数据库的特性,以提高转换的成功率。同时,转换后还需要对生成的MySQL SQL进行测试,确保在目标数据库环境中能正常...
删除表的 SQL 语句使用 DROP TABLE 语句,例如删除 Student 表的 SQL 语句为:DROP TABLE Student。同样,我们可以使用 DROP TABLE 语句删除 Course 表和 SC 表。 二、创建表 在实验中,我们使用 SQL 语句创建实验...
sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明sql语句说明...
总的来说,Java打印漂亮的SQL语句是一个提高开发效率和代码质量的有效方法,通过使用如"PrettySQLFormatter"这样的工具,可以使得复杂的SQL查询变得更容易理解和维护,这对于大型项目或者涉及大量SQL操作的开发工作...
在这个"力控5.0SQL语句使用样例"中,我们将会探讨如何在力控环境中有效地运用SQL语句。 TEST.mdb 是一个Microsoft Access数据库文件,很可能包含了与力控5.0相关的示例数据。在力控5.0中,可以使用SQL语句来与这种...
PB脚本中SQL语句写法与SQL中语句写法对照 PB脚本中SQL语句写法与SQL中语句写法对照是非常重要的知识点,因为PB脚本和SQL语言在写法和应用中有所不同。本文将对PB脚本中SQL语句写法和SQL中语句写法进行对比和分析。 ...
"hibernate执行原生sql语句" Hibernate 是一种流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在一些情况下,我们需要直接执行原生 SQL 语句,而不是使用 Hibernate 的...
1. 动态SQL:在C#中,你可以使用字符串操作生成动态SQL语句,这在需要根据条件生成不同结构的SQL时非常有用。例如,你可以根据用户的选择决定是否在WHERE子句中包含某个条件。 2. 存储过程:另一种方法是使用SQL ...
### Unix下的INFORMIX SQL语句使用详解 #### 嵌入式SQL语句的特点与应用 在Unix环境下,INFORMIX数据库系统提供了强大的SQL功能,支持开发者将SQL语句直接嵌入到宿主语言(如C语言)中。这种嵌入式SQL编程方式能够...
对于需重复查询的sql语句,可巧用with as 对sql语句进行精简,提高查询效率
使用 Navicat 或 PHPMyAdmin 导入 SQL 语句 Navicat 和 PHPMyAdmin 是两个非常常用的数据库管理工具,它们可以帮助我们轻松地管理数据库,特别是在导入 SQL 语句方面。下面我们将详细介绍如何使用 Navicat 和 ...
这个SQL语句使用了Group By语句将表中的数据分组,并使用Case When语句统计每组中的胜和负的数量。 2. Case When语句: 在第二道面试题中,需要使用Case When语句实现逻辑判断。Case When语句是SQL语句中最常用的...
- **VBE环境下ADO方式执行SQL**:在Visual Basic for Applications (VBA)环境中,使用ActiveX Data Objects (ADO)技术可以实现SQL语句的自动化执行,适用于大规模数据处理和脚本编程。 综上所述,SQL在ArcGIS中的...
SQLTracker是一款专为数据库操作监控设计的工具,它在IT领域中主要用于跟踪和记录SQL语句的执行情况。SQL(Structured Query Language)是用于管理关系数据库的编程语言,包括查询、更新、插入和删除数据等操作。SQL...