掌握Thinkphp3.2.0----SQL查询

首先,先谈一下对查询的理解:查询的对象是数据库中的数据表,一个或多个;查询的限制就是各种条件或要求;查询的结果=表对象+限制(条件)。

对数据表的操作(CRUD)查询是最复杂也是最关键的一步!‘SELECT * FROM  WHERE [condition]‘,WHERE是对基本的限制条件。

条件的形式

  1.基本形式----字符串形式。万能形式,查询不安全(不会自动添加安全符号``),就相当于在前边的sql语句上连缀后边的条件。

1 $user = M(‘User‘);
2 //字符串的查询条件
3 $where_str = ‘`this is a string`‘;
4 //显示测试结果
5 $result = $user -> where($where_str) -> select();
6 var_dump($result);

结果:

  可见就是在WHERE之后的条件中写入该字符串,也就该形式可以实现所有的WHERE关键字的SQL查询。

例如:

  

1         $user = M(‘User‘);
2         //字符串的查询条件
3         $where_str = ‘id=1‘;
4         //显示测试结果
5         $result = $user -> where($where_str) -> select();
6         var_dump($result);    

结果:

  

  2.数组形式条件。还是针对WHERE查询,就是把WHERE查询的条件分开,例如id=1条件,分成 id 和 1两部分,写入数组id做键,1做值,另外写入控制符。

数组是比较推荐的形式,这里是数组形式,值是字符串或整型或浮点

例子:

1  $user = M(‘User‘);
2 //数组形式的条件
3 $condition[‘id‘] = array(1);
4 //显示测试结果
5 $result = $user -> where($condition) -> select();
6 var_dump($result);    

结果:

示例

3.对象形式的条件。和数组很像,只是更换了数据的载体为对象(stdClass空对象,PHP程序提供)

  4.表达式查询。实际就是来更改条件中运算符的。根据运算符的不同可能有不同的结构,这种形式相对灵活,可以写出很复杂的SQL查询语句,不行不是还有一个自定义吗。

基本结构:      查询表达式格式:$map[‘字段名‘] = array(‘表达式‘,‘查询条件‘);---数组形式,值是数组.查询条件可以是数组,只是对有的表达式没有作用,比如EQ

LIKE/NOTLIKE

BETWEEN/NOT BETWEEN

1 $user = M(‘User‘);
2 //表达式形式
3 // $map[‘id‘] = array(‘BETWEEN‘,‘1,10‘);这两种形式一样
4 $map[‘id‘] = array(‘BETWEEN‘,array(1,10));
5
6 $result = $user -> where($map) -> select();
7 var_dump($result);

IN/NOTIN-----IN是IN,BETWEEN是BETWEEN!

$user = M(‘User‘);
//表达式形式
$map[‘id‘] = array(‘BETWEEN‘,‘1,10‘);
// $map[‘id‘] = array(‘IN‘,array(1,6));这两种形式一样

$result = $user -> where($map) -> select();
var_dump($result);

 自定义形式:有点像连缀

还有几种其他的形式,多写,找到合适简便就可以了

快捷方式  | &  

  

等价效果:

 1 $user = M(‘User‘);
 2         //快捷方式
 3         $map[‘id&user‘] = 1;
 4         // 等价于
 5         // $map[‘id‘] = 1;
 6         // $map[‘user‘] = 1;
 7         // $map[‘_logic‘] = ‘AND‘;
 8         // 或等价于
 9         // $condition = ‘id=1 AND user=1‘;
10         $result = $user -> where($map) -> select();
11         var_dump($result);

和表达式结合:

1 $user = M(‘User‘);
2         //快捷方式
3         $map[‘id&user‘] = array(array(‘NEQ‘,1),array(‘EQ‘,1),‘_multi‘=>true);
4         $result = $user -> where($map) -> select();
5         var_dump($result);

结果:

SELECT * FROM `think_user` WHERE ( (`id` <> 1) AND (`user` = 1) ) [ RunTime:0.001000s ]感觉这是最好的

还有,不一定是连个字段,可以是3个或多个字段

 再:

$map[‘_string‘] = ‘‘;连缀字符串,可以连接到其他条件上

$map[‘query‘] = ‘‘;URL模式,比较方便

$map[‘_complex‘] = ‘‘;被覆盖的时候使用

 1 $user = M(‘User‘);
 2         //组合查询
 3         /*     $map[‘id‘] = 1;
 4             $map[‘_string‘] = ‘user=1 AND email like 3‘;继续连接字符串形式的条件
 5         */
 6         /*     $map[‘id‘] = 1;
 7             $map[‘_query‘] = ‘user=1&email=2‘;//貌似运算符只能是=
 8         */
 9         /*     $where[‘id‘] = 1;
10             $map[‘id‘] = 1;
11             $map[‘_complex‘] = $where;
12             $map[‘_logic‘] = ‘OR‘;
13         */
14         $result = $user -> where($map) -> select();
15         var_dump($result);

统计查询:$user->count();

动态查询: getById()  getFieldByUser();

SQL原生

query();读

excute();写

时间: 2024-07-30 12:38:18

掌握Thinkphp3.2.0----SQL查询的相关文章

SQL查询oracle的nclob字段

使用CONTAINS关键字查询NCLOB字段 SELECT  FORMATTED_MESSAGE    FROM     FOC.TBL_LOG WHERE     CONTAINS(FORMATTED_MESSAGE, p_FORMATTED_MESSAGE) > 0; SQL查询oracle的nclob字段,布布扣,bubuko.com

SolrCloud6.1.0之SQL查询测试

Solr发展飞快,现在最新的版本已经6.1.0了,下面来回顾下Solr6.x之后的一些新的特点: (1)并行SQL特性支持,编译成Streaming 表达式,可以在solrcloud集群中,并行执行 (2)SolrCloud的Collection被抽象成关系型数据库表,现在不仅仅可以支持强大的全文检索,还通过SQL支持像数据库一样的BI分析 (3)在SQL的where语句中,全面支持强大的Lucene/Solr语法 (4)一些聚合操作例如Group会自动优化成并行操作,通过使用Streaming

Spring Data JPA原生SQL查询

package com.wanda.cms.dao.repository;import org.springframework.stereotype.Repository;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import javax.persistence.Query;import java.math.BigInteger;import java.util.*; /*

提高SQL查询效率

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放

Hibernate 关于执行sql查询语句(转)

原文  http://www.yshjava.cn/post/543.html 主题 SQLHibernate Hibernate对原生SQL查询的支持和控制是通过SQLQuery接口实现的.通过Session接口,我们能够很方便的创建一个SQLQuery(SQLQuery是一个接口,在Hibernate4.2.2之前,默认返回的是SQLQuery的实现类--SQLQueryImpl对象,在下文中出现的SQLQuery如非注明,都是指该子类)对象来进行原生SQL查询: session.creat

笔记:Hibernate SQL 查询

Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQL查询也支持将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程. SQL查询是通过SQLQuery接口来表示的,SQLQuery接口是Query接口的子接口,完全可以使用Query接口的方法,SQLQuery增加了二个重载方法 addEntity():将查询到的记录与特定的实体关联 addScalar():江查询的记录关联标量值 执行SQL的步骤如下: 获取Hib

13.hibernate的native sql查询(转自xiaoluo501395377)

hibernate的native sql查询 在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hibernate推荐的HQL查询语句呢?这是因为HQL查询语句虽然方便我们查询,但是基于HQL的查询会将查询出来的对象保存到hibernate的缓存当中,如果在我们的一个大型项目中(数据量超过了百万级),这个时候如果使用hibernate的HQL查询的话,会一次将我们查询的对象查询出来后放到缓存中,这个时

Hibernate之SQL查询

Hibernate支持使用原生的SQL语句进行查询.使用原生的SQL的好处是:可以利用某些数据库的特性(不同的数据库SQL 语法会有所差异), 将原有的使用JDBC作为持久层技术的应用 ,迁移到使用Hibernate作为持久层技术. 我们知道 使用HQL查询 主要牵涉的是 Query接口,而使用SQL查询 主要牵涉的 是 SQLQuery接口  . 而SQLQuery接口 是 Query接口的子接口. 所以 Query接口中的方法 ,均可以在SQLQuery接口中使用 ,SQLQuery接口还多

Spark编程实现SQL查询的实例

1.Oracle中的SQL select count(1) from a_V_PWYZL_CUSTACCT_PSMIS t where not exists (select 1 from tb_show_multi_question q WHERE q.dqmp_rule_code = '仅比对系统有' and q.dqmp_role_id = '105754659' and q.DQMP_target_id = t.dqmp_mrid) AND NOT EXISTS (select /*+ i

yii2.0数据库查询修改等方法

yii2.0学习有一段时间了,给大家分享一下一些简单的查询等如何操作. 查询:(这里最前面的Test是引用的模型名) Test::find()->all();    此方法返回所有数据: 这些查询出来是对象形式,但是一般转换成数组格式: Test::find()->asArray()->all();     加上asArray()就取得数组形式的数据了,下面的自行添加. Test::findOne($id);   此方法返回 主键 id=1  的一条数据(举个例子): 条件查询:wher