-
在Delphi中动态地使用SQL查询语句
2017-05-26 15:47:23在Delphi中,使用SQL查询语句的途径是:在窗体中置入TQuery构件,设置其 SQL属性的内容值,此内容为一个字符串数组,数组的每个值对应一行SQL查询语句。 可以在程序设计过程中事先指定,也可以在程序运行中重新赋值,...
在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态
特性。下面介绍如何在Delphi中实现这种功能。
在Delphi中,使用SQL查询语句的途径是:在窗体中置入TQuery构件,设置其
SQL属性的内容值,此内容为一个字符串数组,数组的每个值对应一行SQL查询语句。
可以在程序设计过程中事先指定,也可以在程序运行中重新赋值,即可以实现动态
地改变程序中的查询语句。假定程序的窗体中有一个名为Query1的TQuery构件,在
程序运行过程中需要改变它的SQL查询语句内容,则可以引用以下程序行。
Query1.close;
{先关闭以前查询的连接}
Query1.SQL.Clear;
{清除以前的查询语句}
Query1.SQL.Add('select * from mytable');
{增加新的查询语句内容为select * from mytable}
Query1.Prepare;
{发送查询到Borland Database Engine (BDE)}
Query1.open;
{建立新的查询语句的数据库连接}
在Delphi中,要灵活地使用SQL查询语句,还需要使用TQuery构件的Params特性,
即在查询语句中使用参数。Delphi中的SQL语句如需参数,则在参数名称前使用一个
冒号':'来作为标识。例如:'select * from mytable where id_no=:p'一句,其中
p为参数,可以在程序运行过程进行在赋值。在程序运行期动态地创建带参数的SQL
查询语句较为复杂,其过程如下:
Query1.close;
{先关闭以前查询的连接}
Query1.SQL.Clear;
{清除以前的查询语句}
Query1.Params.Clear;
{清除以前查询语句的参数}
Query1.Params.CreateParam(ftString, 'p',ptInput);
{创建新的查询语句的参数p}
Query1.SQL.Add('select * from title1 where NO_GLOBE=:p');
{增加新的查询语句内容为select * from title1 where NO_GLOBE=:p}
{其中p为新建的参数}
Query1.ParamByName('p').asstring:= '1';
{给新的参数赋值为'1'}
Query1.Prepare;
{发送查询到Borland Database Engine (BDE)}
Query1.open;
{建立新的查询语句的数据库连接}
以上两个示例中,SQL查询语句都是SELECT语句,而当SQL语句是UPDATE或INSERT、DELETE时,其中的Query1.Open需要改为Query1.ExecSQL。
4、动态SQL应用实例介绍
下面给出一个完成动态SQL查询、批记录移动的数据库程序。程序从数据库my_database的表TITLE_L.DBF中选取符合要求日期的记录,并批量移动到同一个数据库的表my_table.dbf中。
{指定所要连接的数据库别名}
Database1.AliasName:='MYDATABASE';
Database1.DatabaseName:=my_database;
Database1.connected :=True;
{指定目标表是Table1}
Table1.DatabaseName:= ' my_database';
Table1.TableName:= ' my_table.dbf';
Table1.Active:=True;
{指定源数据的内容对应查询Query1}
Query1.DatabaseName:= ' my_database';
Query1.close;
{程序运行时动态添加SQL查询语句}
Query1.SQL.Clear;
Query1.Params.Clear;
Query1.Params.CreateParam(ftInteger, 'update',ptInput);
Query1.Params.CreateParam(ftInteger, 'dndate',ptInput);
Query1.SQL.Add('SELECT* FROM TITLE_L');
Query1.SQL.Add('where LET_DATE<=:update');
Query1.SQL.Add('AND LET_DATE>:dndate');
Query1.SQL.Add('ORDER BY NO_LOCAL');
Query1.Prepare;
Query1.Params[0].asInteger:=Up_Date;
Query1.Params[1].asInteger:=Down_Date;
Query1.open;
Query1.Active:=True;
{用DBGrid1来显示将要移动的记录}
DataSource1.DataSet:= Query1;
DBGrid1.DataSource:= DataSource1;
{进行批量记录移动}
BatchMove1.Mode:=batAppend;
BatchMove1.RecordCount:=0
BatchMove1.Source:=Query1;
BatchMove1.Destination:=Table1;BatchMove1.Execute;
注意:动态SQL语句中需引入符号”:”来标明动态变量
select * from Content bean where bean.title in (:titles)"
-
在django中使用sql语句查询
2019-05-13 21:37:34django中提供了一个raw()方法来使用sql语句进行查询 class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) birth_date = models.DateField...django中提供了一个raw()方法来使用sql语句进行查询
class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) birth_date = models.DateField(max_length=50) Person.objects.raw('SELECT * FROM myapp_person') # myapp为你的app的名称
使用translations将查询到的字段映射到模型字段
name_map = {'first': 'first_name', 'last': 'last_name', 'bd': 'birth_date', 'pk': 'id'} Person.objects.raw('SELECT * FROM some_other_table', translations=name_map)
如果你只想要第一条数据,可以这样使用
first_person = Person.objects.raw('SELECT * FROM myapp_person')[0] first_person = Person.objects.raw('SELECT * FROM myapp_person LIMIT 1')[0] 当数据库中的数据很多的时候,最好使用第二个方法
如果需要执行参数化查询,可以使用下面这个方法
lname = 'Doe' Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])
不使用raw()进行查询
from django.db import connection def my_custom_sql(self): with connection.cursor() as cursor: cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz]) cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz]) row = cursor.fetchone() return row
如果要在查询中包含文字百分号,则要使用两个%
cursor.execute("SELECT foo FROM bar WHERE baz = '30%%' AND id = %s", [id])
-
sql在where查询语句中使用变量
2018-04-10 18:10:03好气啊,sql语句在查询变量时一直使用的是字符串模板${变量},可是这次查询一个日期时,却失败了,如:2018-04-13 最后在网上终于找到解决办法了 如下: "select * from records where brr_time='"+ ...好气啊,sql语句在查询变量时一直使用的是字符串模板${变量},可是这次查询一个日期时,却失败了,如:2018-04-13
最后在网上终于找到解决办法了
如下:"select * from records where brr_time='"+ brr_time+"' "
个人理解,加上双引号就是为了防止系统默认为字符串,而+起链接作用。
-
SQL中的子查询的使用
2018-06-11 13:05:46把一个查询的结果在另一个查询中使用就叫做子查询 初始数据 有五个表:学生表,老师表,课程表,学院表,课程成绩表。 表结构 初始数据 学生表 老师表 课程表 学院表 课程成绩表 单行子...这篇文章讲述了SQL中的子查询,如有错误或者不妥之处,还请各位大佬批评指正。
什么是子查询?
把一个查询的结果在另一个查询中使用就叫做子查询
初始数据
有五个表:学生表,老师表,课程表,学院表,课程成绩表。
表结构
初始数据
- 学生表
- 老师表
- 课程表
- 学院表
- 课程成绩表
单行子查询
返回的结果集为单个的子查询,叫做单行子查询。单行比较符有 >、>=、<、<=、!=。
- 查询平均成绩比‘王五’大的学生id,姓名,平均成绩
select s.s_id , s.s_name , avg(score) from t_student s join t_grade g on s.s_id = g.s_id group by s.s_id , s.s_name having avg(score) > (select avg(score) from t_student s join t_grade g on s.s_id = g.s_id where s.s_name = '王五' group by s.s_id)
查询结果:
注:子查询中可以嵌套函数,多行子查询不能使用单行比较符。
多行子查询
返回的结果集为多个的子查询,为多行子查询,多行子比较符有 IN(等于列中任意一个)、ANY(和子查询返回的某个值比较),ALL(和子查询返回的所有值比较)。
- 查询其他课程中比课程id为‘400004’课程的任一分数低的学生的学号、姓名、课程号、课程名、分数(ANY)
select s.s_id , s_name , c.c_id , c_name , score from t_grade g join t_student s on g.s_id = s.s_id join t_course c on g.c_id = c.c_id having c.c_id != 400004 and avg (score) < any ( select avg(score) from t_grade where c_id = 400004 group by (c_id) ) group by c.c_id , s.s_id , s.s_name , c_name ,score
查询结果:
- 查询其他课程中比课程id为‘400004’课程的所有分数高的学生的学号、姓名、课程号、课程名、分数(ALL)
select s.s_id , s_name , c.c_id , c_name , score from t_grade g join t_student s on g.s_id = s.s_id join t_course c on g.c_id = c.c_id having c.c_id != 400004 and score > all ( select score from t_grade where c_id = 400004 ) group by c.c_id , s.s_id , s.s_name , c_name ,score
查询结果:
总结:ANY相当于和结果集中的任一一个作比较、若满足则返回,ALL相当于和结果集中的所有结果作比较,若满足则返回。
- 学生表
-
在Excel中使用SQL语句查询和筛选
2018-08-22 10:34:08今天在微博上看到@数据分析精选 分享的一篇文章,是关于《在Excel中使用SQL语句实现精确查询》,觉得非常受用,分享给大家。 微博上有人回复评论说直接用vlookup、或者导入数据库进行查询处理就好了,岂不是更高效... -
matlab中使用sql语言查询过程中如何在select语句中使用变量
2017-03-26 22:02:42matlab中使用sql语言查询过程中,在select语句中使用where语句进行过滤筛选,需要使用变量a时,变量a应该写成如下形式: =''',a,''' ---------------------------------------------------------------------------... -
sql在where查询语句中使用文本值、数值、变量
2019-08-22 13:54:17sql在where查询语句中使用文本值、数值、变量 -
在Access数据库中使用SQL查询分析器
2011-01-14 18:15:00Access数据库常被用于存储本地结构化数据。 因开发或管理的需要有时需要用sql语句分析数据。 但用access自己的向导用... 在新建查询中选择设计视图 3. 然后在新建查询的上半区域右击, 选中 -
在SQL的查询条件中使用case when取数据
2016-06-08 16:54:25在SQL的查询条件中使用case when取数据堪称SQL里的ifelse用法第一步的id是业务信息的id,除第一步外,步骤id最大的表示当前步骤,每次取当前步骤id存入意见表中,例如:select ID, --唯一标识(与步骤id一致) ... -
SQL中的内联查询一般在什么时候会使用?
2016-04-24 02:32:42SQL中的内联查询一般在什么时候会使用? SQL中的内联查询一般在什么时候会使用? SQL中的内联查询一般在什么时候会使用? 例如: SELECT * FROM DEPT,EMP; -
在使用sql查询MAX作为条件
2019-11-20 17:19:22在使用sql查询MAX作为条件 开发中错误sql SELECT x.prs_max_otime, MAX(x.prs_max) FROM data_cimiss_min_201911 x MAX的是最大值,但是x.prs_max_otime不是最大值对应的时间,而是撞到的第一个时间值 正确sql ... -
如何使用简单的 SQL 查询在 MySQL 中计算中位数
2017-09-29 09:26:20什么是中位数?...比如,我在学校的最后一次考试中得了 D (或 80),那么我的在全班同学中的排名是否在前 50%? 举一个具体的例子,我们看看从学校的这些测试分数中找到中位数的过程:[55, 80, 95, 100, 99 -
在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名...
2019-06-20 16:05:55在项目开发中如果有时修改了一个存储过程,但是如何能够快速的查找到使用了这个存储过程的其它存储过程呢?这个问题 对于规模稍微大些的项目而言,显得尤其重要了,数据库中如果有几百个存储过程,难道还一个个找... -
mysql中一条sql语句中使用多个count关联查询多张表
2017-11-22 19:09:18在给公司写代码的过程中忽然发现在sql语句中碰到一些小问题,虽然最终自己解决了,但是不得不说好不容易啊,故写此博客提醒自己,以免日后再在此处浪费时间。 需求: 有两张表,分别是marketChannelInfo表和... -
在Excel中使用SQL语句实现精确查询
2015-09-22 10:57:22来自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html今天在微博上看到@数据分析精选 分享的一篇文章,是关于《在Excel中使用SQL语句实现精确查询》,觉得非常受用,分享给大家。微博上有人回复评论说直接... -
在SQL查询语句中,使用条件where 1=2的意义
2017-09-22 11:26:38WHERE 后面表示过滤的条件,只有满足条件的记录才被选择,因为条件(1=2)为假,其实就是什么都不选择,查询不会返回数据,如果条件是“1=1”就是选择所有记录。 -
在java中使用SQL语句进行 like 查询 (索引)
2019-05-16 10:54:49数据库中写法 : select title from b_blog where...当我们想在java中使用SQL语句查询时通常会写成: String sql = "select id,title,des,content,userId from b_blog where title like %?%"; 或 String sql = "selec... -
在SQL中直接使用存储过程查询返回的结果集
2014-06-21 14:14:35在实际使用存储过程是,有时我们希望先判断存储过程的返回结果集是否有记录,然后走不同的业务逻辑,这是就需要在SQL语句中直接读取到存储过程的返回结果集,方式如下: 先按照存储过程结果集定义一个变量 ... -
Java中使用同样的sql语句在数据库中可以查询出结果,但是在程序中确无法查询出结果——解决方法
2018-12-28 19:15:16最近在写一个JavaWeb项目的时候遇到了一个问题就是,同样的sql语句在数据库中可以查询出结果,但是在程序中确无法查询...所以,如果你也遇到了这种情况就要注意了,很有可能是你的程序只有在sql语句中有中文时不能正... -
在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
2012-06-19 22:06:10在项目开发中如果有时修改了一个存储过程,但是如何能够快速的查找到使用了这个存储过程的其它存储过程呢?这个问题 对于规模稍微大些的项目而言,显得尤其重要了,数据库中如果有几百个存储过程,难道还一个个找... -
sql server sql中使用LEFT JOIN 查询后数据重复
2019-08-16 15:46:09看了原来的代码,发现这个需要在原有的sql上新增加两个表的查询;果断使用left join 将数据查出来了;自测通过了直接提测了;昨天晚上快下班的时候,测试提出了一个问题,说搜索单个单个数据的时候出现了重复数据。 ... -
Hibernate中的sql语句中使用分组查询
2016-04-11 15:30:45今天在写代码时需要用到分组查询,对于查询结果的获取有点不明白, 1.我的应用场景: 优化一个分组查询 数据库里面有一张表message(故障表),包括的字段有message_id(故障编码),app_id(项目编码),msg_... -
ORACLE如何在有视图的SQL中使用hint(提示)来设置视图内的SQL查询方式
2008-03-06 16:34:00ORACLE如何在有视图的SQL中使用hint(提示)来设置视图内的SQL查询方式oracle的hint(提示)我想大家都知道使用吧,如果这个没用的话那就不用往下看了。本文主要介绍ORACLE如何在有视图的SQL中使用hint(提示)来设置视图... -
在Hibernate中使用HibernateTemplate来进行包含sql语句的查询
2011-09-02 16:12:25代码示例: /** * 使用sql语句进行查询操作 * @param sql * @return */ public List queryWithSql(final String sql){ List list = -
sql 调优之-在子查询中使用exist还是 in
2010-05-10 16:59:00sql 调优之---在子查询中使用 exist还是 in Use of EXISTS versus IN for SubqueriesIn certain circumstances, it is better to use IN rather than EXISTS. In general, if theselective predicate is in the ... -
在MyEclipse中构建SQL查询语句
2015-02-26 09:18:57在MyEclipse中的Visual SQL查询编辑器可用于轻松创建复杂的SQL语句,同时...打开Visual SQL查询编辑器将表添加到查询中并创建连接构建一个表达式运行该SQL 持续时间:10分钟 没有MyEclipse?立即下载 1. 打开
收藏数
38,249
精华内容
15,299