数据库sql语句(count(*)和count(字段))

简介: 数据库sql语句(count(*)和count(字段))

例题:


创建如下两张表 分别命名为books和persons

297fa4b8c00343dd9fcc41ab81e967f0.png

ccacaf2b50a241438c47e22669b99d6d.png

(1)按照书名,姓名的顺序列出字里包含‘德’字的人物的姓名,书名和字。


select name 姓名,bookname 书名,style 字
from books,persons
where style like '%德%'
and books.bookid = persons.bookid
order by 2,1;


order by 2,1:先按照书名排序,书名相同再按照姓名排序:一般是按照首字母排序


 a0b5ec7491b94de5b11297e660c9f451.png

(2)哪本书中的人物姓名包含最多‘悟’字?


第一种表示方法:


select bookname 书名
from books,persons
where persons.bookid=books.bookid
and name like '%悟%'
group by bookname
having count(books.bookid)=(select top 1 count(bookid)
from persons
where name like '%悟%'
order by count(bookid) desc)


第二种表示方法:


select bookname 书名 from books
where bookid in(
select bookid from persons
where name like'%悟%’
group by bookid
having count(*) =(
select top (1) count(*) from persons
where name like'%悟%’
group by bookid
order by 1 desc))


count(字段)和count(*)的区别:


count(*) 是统计行数,


count(字段) 是统计字段列非null的行数


在查询字段非null时,两者的查询结果是一样的


补充:


count(1)也是统计行数


对于count(1)和count(*)返回的结果是一样的,但是两者的效率在不同的情况下不同:


如果表中没有主键 ,使用count(1)比count(*)快;


如果有主键,那么count(主键)最快


详细的内容,推荐这篇:http://t.csdn.cn/AiVUl


(3)人物最多的书的男性人物的姓名和字是什么


select name 姓名,style 字
from persons
where sex='男'
and bookid in(select bookid from persons
group by bookid 
having count(bookid) =(select top 1 count(bookid) from persons
group by bookid
order by count(bookid) desc))


7ef6607f21064d3f86f8367555a40a72.png


(4)哪本书的人物姓名都是三个字的


select bookname 书名
from books
where bookid not in(select bookid from persons
where name not in(select name from persons where len(name)=3))


ecc66b67d4bc46898c77a28a043f777d.png

(5)女性人物最多的书是哪个朝代的

select dynasty 朝代
from books
where bookid in (
select bookid from persons
where sex ='女’
group by bookid
having count(*)=(
select top(1) count(*) from persons
where sex='女
group by bookid
order by 1 desc


43bf294b584b4bdab3ba6d9baa4c58a3.png

(6)与唐僧在同一本书的女性人物是谁?


select name 姓名 from books,persons
where books.bookid in(select books bookid from books,persons
where books.bookid=persons.bookid
and name ='唐僧')
and books.bookid=persons.bookid
and sex='女';


1134b07c4e104848a67a3df46532872b.png


(7) 有女性人物但是女性人物最少的书:


select distinct bookname书名,author作者
from books.persons
where books.bookid=persons.bookid
and books.bookid in 
select bookid from persons
where sex ='女'
group by bookid
having count(*) =(
select top(1) count(*)
from persons
where sex='女'
group by bookid
order by 1 asc))


3f1d3146c1b547f6a27f2cada96f83bd.png

目录
相关文章
|
3天前
|
SQL 存储 Oracle
sql数据库使用教程
SQL(Structured Query Language)结构化查询语言是一种用于操作数据库的标准语言,被广泛应用于关系型数据库管理系统(RDBMS),如MySQL、Oracle、Microsoft
|
3天前
|
SQL 关系型数据库 数据库
数据库导出sql
\导出sql\这样的文件通常包含创建表、索引、触发器等的SQL语句,以及插入数据的SQL语句,从而可以在另一个数据库系统上重新创建整个数据库。 以下是一些流行的数据库管理系统(DBMS)如何导出
|
3天前
|
SQL 关系型数据库 MySQL
sql怎么创建数据库
在SQL中,创建数据库通常涉及使用`CREATE DATABASE`语句。以下是一个基本的步骤和示例,说明如何使用SQL来创建一个新的数据库。 ### 步骤: 1. **确定数据库管理系统
|
1天前
|
SQL 数据库
sql数据库练习题(涵盖大部分知识点)
sql数据库练习题(涵盖大部分知识点)
|
2天前
|
SQL 关系型数据库 数据库
nacos 2.2.3版本 查看配置文件的历史版本的接口 是针对MySQL数据库的sql 改成postgresql后 sql语句报错 该怎么解决
在Nacos 2.2.3中切换到PostgreSQL后,执行配置文件历史版本分页查询出错,因`LIMIT 0, 10`语法不被PostgreSQL支持,需改为`LIMIT 10 OFFSET 0`。仅当存在历史版本时报错。解决方案是调整查询SQL以兼容PostgreSQL语法。
|
2天前
|
SQL Oracle 关系型数据库
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
mysql和oracle 命令行执行sql文件 数据库执行sql文件 执行sql语句
|
2天前
|
SQL XML Java
java与sql server数据库连接
在Java中连接SQL Server数据库,你通常需要使用JDBC (Java Database Connectivity)。以下是一个简单的步骤指南,帮助你建立连接: ### 1. **下载并
|
2天前
|
SQL 关系型数据库 MySQL
sql数据库指令
SQL(Structured Query Language,结构化查询语言)是用于管理关系数据库的标准编程语言。以下是一些常用的SQL数据库指令: 1. **创建数据库** ```sq
|
3天前
|
SQL 关系型数据库 MySQL
sql数据库建表步骤
在SQL数据库中建表的步骤通常包括以下几个部分: 1. **打开SQL数据库管理工具**: 使用适当的SQL数据库管理工具,如MySQL Workbench、Microsoft SQL
|
3天前
|
SQL 数据库 索引
sql server 跨数据库查询
在 SQL Server 中,跨数据库查询是指在一个数据库查询中访问另一个数据库的数据。这通常是在同一 SQL Server 实例上的不同数据库之间进行的。跨数据库查询在很多场景下都很有用,比如数据整