这篇博文主要是对我自己用过的sql语句进行展示,然后不断完善,形成自己写sql语句的风格,并提高自己sql语句的运行速度。之前自己对左连接等一系列的sql语句都不是很熟悉,经过这几天的学习和项目中实际需求的使用,学会了一些sql语句。现在将我写的sql语句展示出来。主要分为两类,一类是通过yii框架里的sql语句写法,一类是正常的sql语句。

先说正常的sql语句吧。
1.首先是多表查询,先涉及到的是join方法,下面这条连接,有几个点需要注意,一个是group by的使用,group by的话,表示的是按照后面的那个关键字排序,如果遇到重复的,就会只取第一条信息。
还有如果在很多and的条件里面,有需要或的关系的话,可以向下面这个方法一样,使用括号括起来,然后写上or的语句,
还有要注意,多表查询的话,一定要注意两张表示靠什么关键字段连接的,如下面的sql语句,os.order_id = o.id 这个就是他们连接的依据。

SELECT os.city_id, o.id as order_id, o.c_id
From order_social_detail os JOIN order o
WHERE os.order_id = o.id
AND o.pay_status = 0
AND (social_type = 1 OR social_type = 5 OR social_type = 8)
GROUP BY o.id

2.说道join的方法的话,就一定得提left join 这种左连接了,以左边的表为主表,也就是前面的表。
如下面的sql语句,其本质和join是一样的,他的条件是用ON这个关键字然后加上 us.city_id = cd.area_id两种表关联的属性相连接的。
然后还可要注意的是,这个地方用了IN这个关键字,表示你搜索的东西在你的括号包含的东西里面。

SELECT cd.deadline_day FROM {{user_socialmanage}} us
LEFT JOIN {{city_data}} cd
ON us.city_id = cd.area_id
WHERE us.is_delete = 0
AND us.social_security_status IN ('0,1,3')
AND us.c_id = {$c_id}
GROUP BY us.city_name

3.下面这个sql语句主要说明是不等号的使用方式,还有小于等于的方式。

SELECT * FROM jy_order_social_detail
WHERE last_feedback_content != ''
AND c_id = {$c_id} and is_delete = 0
AND service_status <= 4

4.现在要讲的是,获取数据库表里面存的数据不为空的信息,用is not null这个关键词,如果是要为空的话,用is null。就是因为这个原因,所以数据最好不要存为null,避免歧义。

SELECT city_id From user_socialmanage
where (social_security_current_month is not null)
and social_security_status = 1
and is_delete = 0

5.count()的使用。下面的就是最基本的count()的使用方式了。

SELECT count(*) From user_socialmanage
where (social_security_status=0 or social_security_status=1 or social_security_status=3)

6.如果在yii框架里面,如果你想在sql语句中加入变量的话,可以采用分离,然后用. 点的方式来连接,也可以直接在sql语句中,用大括号将其变量包起来。

public function getServiceStatusByCid($params) {//传进来的$parmas是数组,包括$service_status和c_id$c_id = $params['c_id'];$service_status = $params['service_status'];$sql = "SELECT id From {{order_social_detail}} where service_status = {$service_status} and c_id = {$c_id} and is_delete = 0";$command = Yii::app()->db->createCommand($sql);$service_status_data = $command->queryAll();//采用 . 的方式分离,这个要1注意的是,sql语句都要用双引号哦。$sql = "SELECT id From {{order_social_detail}} where service_status = ". $service_status ." and c_id = ". $c_id ." and is_delete = 0";$command = Yii::app()->db->createCommand($sql);$service_status_data = $command->queryAll();return $service_status_data;}

7.在使用model层里面的searchs的方法的时候,要通过以下的方法进行sql语句里面的参数进行赋值。

$command = Yii::app()->db->createCommand($sql);
if ($where ['bind_value']) {foreach ( $where ['bind_value'] as $key => $val ) {$command->bindValue ( $key, $val ['value'], $val ['type'] );}
}
$data = $command->queryAll();
return $data;

8.对时间进行格式化,比如在数据库里面存的日期为2015-10-02 00:00:00,这样datetime的形式,然后我只需要年月日的方式或者其他类型的方式的时候,可以使用DATE_FORMAT这个方法对时间进行优化。

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d') 

9.取当前时间比数据库里面存的时间大15天的情况的时候,sql语句有两种写法,一种是
SELECT * from jy_order_social_detail WHERE datediff(handle_time, date(NOW()))<10
另外一种

((unix_timestamp() - unix_timestamp(handle_time))/86400)>15 

10.如果使用getwhere方法对sql语句进行组装的话,要小心in的操作,是in的话,就通过拼接进行组装

if (isset($condition['id_array'])) {$where .= " AND o.id in (".$condition['id_array'].")";
}
  1. 关于排序的几个问题
    1).排序的时候,先将不为空的取出,然后再对剩下的值进行升序排序
CASE WHEN IFNULL(times, '') = '' THEN 0 ELSE 1 END DESC, times ASC,

2) 通过判断是否有值,如果有值的排在前面

 CASE WHEN o.last_feedback_content IS NULL THEN 1 ELSE 0
  1. LPAD这个方法是如果cd.deadline_day的值小于 2 位的话,自动加上一个 0
LPAD(cd.deadline_day, 2, "0") 

13.这个就是将两个值拼接在一起

CONCAT(time, '-15')

8.在表里面插入一个新的字段

ALTER TABLE jy_sequence ADD start_time  DATETIME

9.初始化字段为当前时间

UPDATE jy_sequence SET end_time = NOW()

使用过得sql语句展示--会不断更新完善相关推荐

  1. mybatisplus执行sql语句_一条更新的SQL语句是如何执行的?

    提出问题 UPDATE student SET score = score + 1 WHERE uid = 666; 以上就是一条最简单的SQL更新语句,想要知道上面这句SQL语句是怎么执行的先要了解 ...

  2. SQL语句(三) 更新语句(增 删 改)

    一.插入 INSERT INTO 表名(列名1,列名2--)//列名可以省略,省略情况下是表格的所有列 VALUES(常量1,常量2--)//与上句中的列对应 二.修改 UPDATE 表名 SET 列 ...

  3. vba搜索java里面的sql_在EXCEL中使用SQL语句查询集锦-持续更新中,敬请关注

    StrA = "" StrA = StrA & " SELECT YEAR(日期) AS 年份" StrA = StrA & ",工地 ...

  4. 按日统计注册人数SQL语句详解(自动补齐空缺数据)

    按日统计XX人数其实是一个很常用的功能.比如说按日统计注册人数.按日统计订单数等.原理其实很相似,一通百通. 话不多说,进入正题. 一.最终sql语句展示 我们先来看下最终的sql语句及得到的结果: ...

  5. 一起谈.NET技术,linq2sql:直接执行sql语句

    1.ExecuteQuery方法 看命名,我们很容易联想到ado.net里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该&quo ...

  6. LINQ to SQL语句(1)之Where(抄的好)

    Where操作适用场景:实现过滤,查询等功能.说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操作包括3种形式,分别为简单形式.关 ...

  7. SQL语句大全-珍藏首选

    下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE, ...

  8. SQL语句一二三之SQL基本语句

    本文将带领读者掌握SQL四条最基本的数据操作语句:Insert,Select,Update和Delete. 熟练掌握SQL是数据库用户的宝贵财富.在本文中,我们将引导你掌握四条最基本的数据操作语句-S ...

  9. 数据库sql语句练习巩固与强化

    一.SQL简介 SQL:结构化查询语句,是一种总专门用来与数据库通信的语言. SQL 语句用于取回和更新数据库中的数据.SQL 可与数据库程序协同工作,比如 MS Access.DB2.Informi ...

最新文章

  1. 30条HTML代码编写指南 for入门者
  2. Java并发:volatile内存可见性和指令重排
  3. C/Cpp / 设计模式 / 简单工厂模式
  4. 47session 方法
  5. 为什么说黄桃罐头是东北的人参果
  6. 麒麟990 5G获外媒好评:华为Mate30系列有望引领5G时代新体验
  7. 安装mysql没有密码_如何在没有密码提示的情况下安装MySQL?
  8. python自学-我是如何自学 Python 的
  9. 一个伤心人的帖和一群搞笑人的跟帖
  10. java收到邮件后短信提醒_java邮件发送和短信发送(二)
  11. Spring中的bean是否是线程安全的
  12. PTA 7-2 统计素数并求和
  13. 支付宝VS微信支付竞品分析
  14. 标题中冒号的用法_英文中冒号的各种用法
  15. Windows开机启动项/自启动项文件夹位置
  16. 微信公众号吸粉软件助你快速增加粉丝数和文章阅读量!
  17. [JsHtml]全面清除前端缓存
  18. sublime匹配汉字
  19. vue控制滚动条滑到某个位置
  20. split-horizon产生的路由欺骗

热门文章

  1. 哪款耳机音质好又耐用?音质最好的耳机排名
  2. Win2012安装IIS
  3. html大小和浏览器可视区域一样吗,浏览器窗口可视区域大小
  4. WPF学习:4.类型转换和标记扩展
  5. 2022年重庆二级建造师市政公用工程《城市桥梁工程质量检查与检验》每日练习及答案
  6. 弘辽科技:流量起不来转化差到爆应该怎么解决
  7. 多线程之间如何实现同步?
  8. Django Rest Framework的使用整理
  9. Unity资源--几种卡通动物的模型+动画
  10. 逆波兰表达式(c++)