精华内容
下载资源
问答
  • 想要在中去除某一个字段的固定字符如下:z–>0(注意:更换单引号要使用双引号包裹,双引号相反) update set 字段=REPLACE(字段,"z",'0'); 替换字段使用CONCAT合并字符串 UPDATE a SET a.字段 = CONCAT...

    想要从表里提取出某个长度固定的字段使用length函数如下:

    SELECT * FROM user u WHERE  length(u.USER_MOBILE)<11;
    

    想要在表中去除某一个字段的固定字符如下:z–>0(注意:更换单引号要使用双引号包裹,双引号相反)

    updateset 字段=REPLACE(字段,"z",'0');
    

    替换字段使用CONCAT合并字符串

    UPDATE 表 a SET a.字段  = CONCAT('0376', a.`字段`)';
    

    多表联查的

    //多表联查
    SELECT DISTINCT 
      * 
      FROM
      表 k,
      表 u 
    WHERE k.字段 = u.字段;
    

    根据表查询出某几个字段后,再把查出来的表当成原始表,进行查询计算

    
    select count(kk.aa),kk.cc
    from (
    SELECT 
      k.kuandai aa,
      k.city cc
    FROM
      表 k,
      表 u 
    WHERE k.字段 = u.字段 ) kk
    group by kk.cc;
    
    展开全文
  • 如果你想查某个表,只需写个entity,写个repository,service里注入一下repository就开始查了。如果你想查某个字段,直接get就行了。开发效率,就一个字,高。 但是对于复杂查询,比如多表多条件查询,头疼事就来了...

    最近项目一直在用jpa开发,总体来说jpa还是很方便的,较之于mybatis,尤其是做一些简单查询的时候。如果你想查某个表,只需写个entity,写个repository,service里注入一下repository就开始查了。如果你想查某个字段,直接get就行了。开发效率,就一个字,高。

    但是对于复杂查询,比如多表多条件查询,头疼事就来了。这里的多条件我是指查询条件的个数不固定,比如最多有五个查询条件,某次查询可能只根据其中的两个或者三个条件来查。另外,多表的多字段返回也是一个麻烦事,因为一般我们都只是返回一个表的entity。

    那么,有什么方法可以解决这些问题吗?当然有。今天,我们就来讨论一下如何解决jpa多表关联查询并返回多表多字段的问题。

    总体思路就是利用querydsl进行原生sql查询。

    首先,引入querydsl依赖。

    然后,注入EntityManager。

    @PersistenceContext
    private EntityManager entityManager;

    接下来就是拼sql,使用entityManager进行查询了。

    String querySql = "select A.id aId, A.name aName, B.id bId, B.name bName from A inner join B on A.b_id = B.id limit 0,10";
    List<Object[]> resultList = entityManager.createNativeQuery(querySql).getResultList();

    其中,querySql就是查询语句了,这样就可以像mybatis一样灵活,你可以设置查哪些表的哪些字段,有哪几个查询条件,等等。createNativeQuery()用于执行原生sql。返回结果为List<Object[]>,一个包含对象数组的列表,Object[]里放的就是一条记录的各个字段值。

    最后,分页查询查总记录数。

    BigInteger total = (BigInteger)entityManager.createNativeQuery(countSql).getSingleResult();

    其中,countSql就是查询总记录数的sql,自己拼就是了。getSingleResult()方法返回一个Object,实际类型是BigInteger,所以要转一下,这就是结果了。

    好了,文章开头抛出的问题解决。

    
     

     

    展开全文
  • 交叉表查询是将来源于某个表的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值。交叉表分为静态交叉表和动态交叉表,其中静态交叉表中列是固定的,...

    MySQL讲义第 33 讲——select 查询之静态交叉表查询

    交叉表查询是将来源于某个表中的字段进行分组,一组列在交叉表左侧,一组列在交叉表上部,并在交叉表行与列交叉处显示表中某个字段的各种计算值。交叉表分为静态交叉表和动态交叉表,其中静态交叉表中的列是固定的,而动态交叉表中的列需要动态生成。

    使用交叉表查询来计算和重构数据,可以简化数据分析。交叉表查询计算数据的总和,平均值,计数及其他类型的统计,并将它们分组,一组列在数据表左侧作为交叉表的行字段,另一组列在数据表的顶端作为交叉表的列字段。

    一、数据准备

    有下面三张表,表结构和数据如下:

    mysql> select * from users;
    +---------+-----------+-------------+-----------+
    | user_id | user_name | phone       | addr      |
    +---------+-----------+-------------+-----------+
    | 2020101 | 张华      | 15937310588 | Xinxiang  |
    | 2020102 | 张毅德    | 13783730566 | Xinxiang  |
    | 2020103 | 刘选德    | 13602313277 | Beijing   |
    | 2020104 | 赵紫龙    | 13703713731 | Zhengzhou |
    | 2020105 | 关云常    | 13637312446 | Xinxiang  |
    | 2020106 | 刘蓓      | 15037130526 | Zhengzhou |
    | 2020107 | 刘晓璐    | 18237150566 | Zhengzhou |
    +---------+-----------+-------------+-----------+
    7 rows in set (0.00 sec)
    
    mysql> select * from goods;
    +----------+------------+---------+------------+
    | goods_id | goods_name | price   | categories |
    +----------+------------+---------+------------+
    |     1101 | 帽子       |   58.00 | 服装       |
    |     1102 | 裤子       |  150.00 | 服装       |
    |     1103 | 运动鞋     |  580.00 | 服装       |
    |     1104 | 西服       | 1508.00 | 服装       |
    |     2201 | 香蕉       |    2.58 | 水果       |
    |     2202 | 苹果       |    4.98 | 水果       |
    |     2203 | 葡萄       |    6.88 | 水果       |
    |     3301 | 笔记本     |   25.00 | 文具       |
    |     3302 | 钢笔       |   25.80 | 文具       |
    +----------+------------+---------+------------+
    9 rows in set (0.00 sec)
    
    mysql> select * from orders;
    +----------+---------+----------+----------+---------------------+
    | order_id | user_id | goods_id | quantity | order_date          |
    +----------+---------+----------+----------+---------------------+
    |        1 | 2020101 |     1101 |     1.00 | 2020-10-22 09:05:21 |
    |        2 | 2020101 |     1102 |     1.00 | 2020-10-20 00:00:00 |
    |        3 | 2020101 |     2201 |     2.50 | 2020-10-21 00:00:00 |
    |        4 | 2020101 |     2202 |     4.50 | 2020-10-21 00:00:00 |
    |        5 | 2020101 |     2203 |     2.50 | 2020-10-20 00:00:00 |
    |        6 | 2020101 |     3301 |     2.00 | 2020-10-20 00:00:00 |
    |        7 | 2020102 |     2201 |     3.50 | 2020-10-22 00:00:00 |
    |        8 | 2020102 |     2202 |     2.00 | 2020-10-22 00:00:00 |
    |        9 | 2020103 |     2202 |     2.00 | 2020-10-19 00:00:00 |
    |       10 | 2020103 |     2203 |     1.20 | 2020-10-19 00:00:00 |
    |       11 | 2020103 |     3302 |     1.00 | 2020-10-20 00:00:00 |
    |       12 | 2020103 |     1101 |     1.00 | 2020-10-19 00:00:00 |
    |       13 | 2020103 |     1102 |     1.00 | 2020-10-20 00:00:00 |
    |       14 | 2020104 |     1102 |     1.00 | 2020-10-20 00:00:00 |
    |       15 | 2020104 |     2201 |     1.80 | 2020-10-19 00:00:00 |
    |       16 | 2020104 |     2202 |     3.20 | 2020-10-19 00:00:00 |
    |       17 | 2020104 |     3302 |     1.00 | 2020-10-20 00:00:00 |
    |       18 | 2020105 |     1103 |     1.00 | 2020-10-21 00:00:00 |
    |       19 | 2020105 |     1104 |     1.00 | 2020-10-21 00:00:00 |
    |       20 | 2020105 |     2201 |     1.80 | 2020-10-22 00:00:00 |
    |       21 | 2020105 |     2202 |     3.20 | 2020-10-22 00:00:00 |
    |       22 | 2020105 |     2203 |     2.00 | 2020-10-21 00:00:00 |
    |       23 | 2020105 |     3302 |     1.00 | 2020-10-21 00:00:00 |
    |       24 | 2020106 |     1102 |     1.00 | 2020-10-22 00:00:00 |
    |       25 | 2020106 |     1103 |     1.00 | 2020-10-22 00:00:00 |
    |       26 | 2020106 |     1104 |     1.00 | 2020-10-22 00:00:00 |
    |       27 | 2020106 |     2201 |     2.00 | 2020-10-21 00:00:00 |
    |       28 | 2020106 |     2202 |     3.50 | 2020-10-21 00:00:00 |
    |       29 | 2020106 |     2203 |     5.50 | 2020-10-21 00:00:00 |
    +----------+---------+----------+----------+---------------------+
    29 rows in set (0.00 sec)
    

    二、交叉表的形式

    交叉表又称为行列转换,就是把下面的表1 转换为表2(交叉表)。

    select stu_name,c_name,score
    from stu s,course c,score sc where s.stu_id=sc.stu_id and c.c_id=sc.c_id;
    --################################  表1  #############################################
    +-----------+-----------------------+-------+
    | stu_name  | c_name                | score |
    +-----------+-----------------------+-------+
    | 王占峰    | 管理学原理            |    88 |
    | 王占峰    | 政治经济学            |    75 |
    | 王占峰    | 数据库系统原理        |    89 |
    | 王占峰    | 企业管理概论          |    95 |
    | 刘国强    | 管理学原理            |    65 |
    | 刘国强    | 政治经济学            |    79 |
    | 刘国强    | 数据库系统原理        |    72 |
    | 刘国强    | 企业管理概论          |    91 |
    | 王艳艳    | 管理学原理            |    84 |
    | 王艳艳    | 政治经济学            |    76 |
    | 王艳艳    | 数据库系统原理        |    68 |
    | 王艳艳    | 企业管理概论          |    92 |
    | 赵牡丹    | 管理学原理            |    64 |
    | 赵牡丹    | 政治经济学            |    75 |
    | 赵牡丹    | 数据库系统原理        |    81 |
    | 赵牡丹    | 企业管理概论          |    90 |
    +-----------+----------------------+-------+
    --################################  表2  #############################################
    +-----------+--------------+---------------+-------------------+------------------+--------+
    | stu_name  | 管理学原理    | 政治经济学    | 数据库系统原理      | 企业管理概论      | 总分   |
    +-----------+---------------+---------------+------------------+------------------+--------+
    | 刘国强    |            65 |            79 |                72 |               91 |    307 |
    | 王占峰    |            88 |            75 |                89 |               95 |    347 |
    | 王艳艳    |            84 |            76 |                68 |               92 |    320 |
    | 赵牡丹    |            64 |            75 |                81 |               90 |    310 |
    +-----------+---------------+---------------+-----------------------+--------------+--------+
    

    三、静态交叉表的实现

    生成交叉表的基本方法为:
    (1)按照交叉表的行字段进行分组(比如上例中的 stu_name)。
    (2)对要转换为列的行字段(比如上例中的 c_name)进行统计,在统计函数中使用 IF 函数对数据进行筛选,生成列字段。

    例如:

    1、根据 user、goods 和 orders 三张表查询每个用户每种类别的商品的消费金额

    第一步:根据 u.user_name 和 categories 两个字段分组,统计消费金额

    mysql> SELECT
        -> u.user_name as 用户姓名,
        -> categories as 消费类别,
        -> sum(o.quantity * g.price) as 总金额
        -> FROM
        -> users u JOIN orders o ON u.user_id = o.user_id 
        -> JOIN goods g ON o.goods_id = g.goods_id
        -> GROUP BY u.user_name,categories;
    +--------------+--------------+-----------+
    | 用户姓名     | 消费类别     | 总金额    |
    +--------------+--------------+-----------+
    | 关云常       | 文具         |   25.8000 |
    | 关云常       | 服装         | 2088.0000 |
    | 关云常       | 水果         |   34.3400 |
    | 刘蓓         | 服装         | 2238.0000 |
    | 刘蓓         | 水果         |   60.4300 |
    | 刘选德       | 文具         |   25.8000 |
    | 刘选德       | 服装         |  208.0000 |
    | 刘选德       | 水果         |   18.2160 |
    | 张华         | 文具         |   50.0000 |
    | 张华         | 服装         |  208.0000 |
    | 张华         | 水果         |   46.0600 |
    | 张毅德       | 水果         |   18.9900 |
    | 赵紫龙       | 文具         |   25.8000 |
    | 赵紫龙       | 服装         |  150.0000 |
    | 赵紫龙       | 水果         |   20.5800 |
    +--------------+--------------+-----------+
    15 rows in set (0.00 sec)
    

    第二步:对消费类别字段分别按文具、服装、水果为条件进行筛选,然后转换为列,代码如下:

    mysql> SELECT
        -> u.user_name as 用户,
        -> sum(if(categories = '服装',o.quantity * g.price,0)) as 服装,
        -> sum(if(categories = '文具',o.quantity * g.price,0)) as 文具,
        -> sum(if(categories = '水果',o.quantity * g.price,0)) as 水果,
        -> sum(o.quantity * g.price) as 总金额
        -> FROM
        -> users u JOIN orders o ON u.user_id = o.user_id 
        -> JOIN goods g ON o.goods_id = g.goods_id
        -> GROUP BY u.user_name;
    +-----------+-----------+---------+---------+-----------+
    | 用户      | 服装      | 文具    | 水果    | 总金额    |
    +-----------+-----------+---------+---------+-----------+
    | 关云常    | 2088.0000 | 25.8000 | 34.3400 | 2148.1400 |
    | 刘蓓      | 2238.0000 |  0.0000 | 60.4300 | 2298.4300 |
    | 刘选德    |  208.0000 | 25.8000 | 18.2160 |  252.0160 |
    | 张华      |  208.0000 | 50.0000 | 46.0600 |  304.0600 |
    | 张毅德    |    0.0000 |  0.0000 | 18.9900 |   18.9900 |
    | 赵紫龙    |  150.0000 | 25.8000 | 20.5800 |  196.3800 |
    +-----------+-----------+---------+---------+-----------+
    6 rows in set (0.00 sec)
    

    第三步:添加总计行

    mysql> SELECT
        -> IFNULL(u.user_name,'总计') as 用户,
        -> sum(if(categories = '服装',o.quantity * g.price,0)) as 服装,
        -> sum(if(categories = '文具',o.quantity * g.price,0)) as 文具,
        -> sum(if(categories = '水果',o.quantity * g.price,0)) as 水果,
        -> sum(o.quantity * g.price) as 总金额
        -> FROM
        -> users u JOIN orders o ON u.user_id = o.user_id 
        -> JOIN goods g ON o.goods_id = g.goods_id
        -> GROUP BY u.user_name
        -> WITH rollup;
    +-----------+-----------+----------+----------+-----------+
    | 用户      | 服装      | 文具     | 水果     | 总金额    |
    +-----------+-----------+----------+----------+-----------+
    | 关云常    | 2088.0000 |  25.8000 |  34.3400 | 2148.1400 |
    | 刘蓓      | 2238.0000 |   0.0000 |  60.4300 | 2298.4300 |
    | 刘选德    |  208.0000 |  25.8000 |  18.2160 |  252.0160 |
    | 张华      |  208.0000 |  50.0000 |  46.0600 |  304.0600 |
    | 张毅德    |    0.0000 |   0.0000 |  18.9900 |   18.9900 |
    | 赵紫龙    |  150.0000 |  25.8000 |  20.5800 |  196.3800 |
    | 总计      | 4892.0000 | 127.4000 | 198.6160 | 5218.0160 |
    +-----------+-----------+----------+----------+-----------+
    7 rows in set (0.00 sec)
    --说明:使用 IFNULL 函数把最后一行第一列的 NULL 替换成 '总计'。
    
    展开全文
  • 需求:查询数据时,是某个字段的值都一样/固定 实现 1、SQL:id与name是表里属性,而field1和field2是查询结果任意别名 --field1和field2为任意别名 select id,'' AS "field1",'哈哈' AS "field2",name FROM...

    需求:查询数据时,某列的值都一样/固定

    实现

    1、SQL:id与name是表里的属性,而field1和field2是查询结果的任意别名

    --field1和field2为任意别名
    select id,'' AS "field1",'哈哈' AS "field2",name FROM SYS_USER  

    2、结果

    补充:不需要在表里创建该列,只要用的时候实体类里存在即可

    展开全文
  • 当你从某个表查询数据时候,返回结果集中都会带有rownum这个字段,而且有时候也可以使用rownum进行一些条件查询。  和rownum相似,oracle还提供了另外一个伪数列:rowid。不过rowid和rownum不同,一般说来...
  • 近日在处理数据的时候遇到一个问题,数据存储在MongoDB数据库,而MongoDB模式自由、具有很大的灵活性,可以把不同结构的文档存储在同一个数据库里,即表的字段不是完全固定的,当某个字段有值时就会显示该字段,而当...
  • Native SQL使用

    2013-08-13 16:34:00
    例如后台数据库为Oracle,对数据某个字段大小写是不固定的,若以这个字段为查旬条件,一般Oracle处理方法是使用Upper /Lower函数据将被查询字段都转换为大、小定以固定查询条件,但OPEN SQL无法实现此功能,只有...
  • 什么时候使用B+树索引 并不是所有查询条件下出现列都需要添加索引。对于什么时候添加索引,我们通过经验判断,访问中很少一部分行时候,使用B+树索引才有意义...相反,如果某个字段取值范围不固定,几乎没有重复,
  • 实例9-9 比较两张表,将只存在于某个表行数据抓取出来 实例9-10 删除工作表数据区域内所有空行 第10章 将文本文件当作数据库来操作 实例10-1 利用ADO导入文本文件全部内容 实例10-2 利用DAO导入文本...
  • 在做连接数据库,在页面上用DropDownList 下拉框查询某条数据时,因为数据库里数据,随时都有可能增加或减少,而下拉框关联的某个字段的值并不一定是固定的信息: CREATE TABLE [dbo].[mail_type] ( ...
  • Excel VBA与数据库整合应用范例精讲

    热门讨论 2011-10-29 18:48:38
    实例9-9 比较两张表,将只存在于某个表行数据抓取出来 实例9-10 删除工作表数据区域内所有空行 第10章 将文本文件当作数据库来操作 实例10-1 利用ADO导入文本文件全部内容 实例10-2 利用DAO导入文本...
  • 例:表删除将同时删除表的数据和表的定义 sql>drop table test c、表空间的创建、删除 六、ORACLE逻辑备份的SH文件 完全备份的SH文件:exp_comp.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager ...
  • 例如数据中用户选择字段方式改变,用户查询的需求也会不断更新和完善。所有这些,都要求系统提供足够手段进行功能调整和扩充。而要实现这一点,应通过系统开放性来完成,既系统应是一个开放系统,只要...
  • MySQL命令大全

    2018-01-15 11:19:17
    Select: 显示/搜索表的记录。 Update: 修改表中已存在的记录。 特别的权限: ALL: 允许做任何事(和root一样)。 USAGE: 只允许登录–其它什么也不允许做。 ——————— MYSQL常用命令 有很多朋友虽然安装好...
  • 【MySQL】索引使用策略及优化

    热门讨论 2018-05-20 12:28:58
    在经常查询而不经常增删改操作的字段加索引。 order by 与 group by 后应直接使用字段,而且字段应该是索引字段。 一个索引不应该超过 6 个。 索引字段的长度固定,且长度较短。 索引字段重复不能过多,...
  • MYSQL常用命令大全

    2011-05-30 13:31:24
    Select: 显示/搜索表的记录。 Update: 修改表中已存在的记录。 特别的权限: ALL: 允许做任何事(和root一样)。 USAGE: 只允许登录--其它什么也不允许做。 --------------------- MYSQL常用命令 有很多朋友虽然安装...
  • 索引使用策略及优化

    2018-07-01 16:40:03
    创建索引在经常查询而不经常增删改操作的字段加索引。order by与group by后应直接使用字段,而且字段应该是索引字段。 一个索引不应该超过6个。索引字段的长度固定,且长度较短。索引字段重复不能过多,如果...
  • orcale常用命令

    2009-08-04 00:34:59
    例:表删除将同时删除表的数据和表的定义 sql>drop table test c、表空间的创建、删除 六、ORACLE逻辑备份的SH文件 完全备份的SH文件:exp_comp.sh rq=` date +"%m%d" ` su - oracle -c "exp system/manager ...
  • 问题一: 某电商服务端使用mysql作为数据存储,发现在业务高峰期时,后台报表页面无法从mysql中查询出数据。...2) 将Null值用常量替换,比如数值型用0替换,字符串型某个固定的字符替换 3) 优化sql语句,除了...
  •  编写好后使用SQLServer的固定角色sysadmin注册该扩展存储过程,并将执行权限授予其它用户,这个扩展存储过程只能添加到master数据库。  在编写扩展存储过程中可能要用到某些系统存储过程,这些系统存储过程如下:...
  • 有效性规则 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序...
  • 有效性规则 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序...
  • 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序数据 1246.2.3...
  • 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序数据 1246.2.3...
  • 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序数据 1246.2.3...
  • 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序数据 1246.2.3...
  • 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序数据 1246.2.3...
  • 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序数据 1246.2.3...
  • 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序数据 1246.2.3...
  • 1205.8 疑难解答 1215.9 现实世界—批量数据输入 121第6章 排序、查找和筛选表中的数据 1236.1 理解排序和筛选的作用 1236.2 排序表的数据 1236.2.1 冻结表中某个字段的显示 1246.2.2 在单个字段上排序数据 1246.2.3...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

查询某个表的固定字段