Estas pocas preguntas de la entrevista de SQL matan a la mayoría de los graduados con 0 años de experiencia laboral

Recientemente, un amigo envió algunas preguntas de SQL y dijo que las encontró durante la entrevista. Eche un vistazo a las preguntas, de hecho es diferente de las preguntas generales de SQL, todavía hay algunos trucos, para los principiantes sin experiencia laboral, una pequeña parte de ellos puede escribir una pregunta y algunos también pueden escribir dos preguntas. mucho.

Sin embargo, para los programadores con experiencia laboral, al menos 3 de estas preguntas no son un problema.
Si usted es un compañero de clase que se acaba de graduar, se encuentra con estas preguntas en la entrevista y sabe cómo hacerlo, entonces felicidades, con estas pocas preguntas de SQL, puede pasar la entrevista el 90% de las veces.

No digas tonterías, empecemos con la pregunta:

Pregunta 1: use una instrucción SQL para consultar registros que no son números puros en un campo (A) en la tabla de negocios (test_1)

Pregunta 2: use una oración de SQL para consultar la tabla de clasificación de ventas de productos (test_2) del tercer al sexto nombre del producto y
datos de ventas: ranking de ventas de productos test_2 (número de producto: pro_id, volumen de ventas: sales_volume)
Tabla de productos test2_pro (producto número: pro_id, nombre del producto pro_name)

Pregunta 3: use una oración de SQL para eliminar los datos duplicados en el campo c de la tabla de acuerdo con la clave principal (tabla: test_3; clave principal: dos campos a y b, y el campo c es varchar)

Pregunta 4: Use una oración de SQL para resumir los datos de la tabla de negocios (prueba_4) (Figura 1), y resuma el monto del pago para cada tienda y método de pago diariamente, y use una oración de SQL para convertirlo en el formato que se muestra en la figura 2.

================================================== ================================================== ===============================================
_

Permítanme hacer algunas quejas antes de dar una conferencia. Las preguntas de SQL son asquerosas. Si no tiene experiencia, primero debe construir los datos. De lo contrario, incluso si los escribe, no puede garantizar que lo que escribió sea correcto. Si la construcción no está nivelada, incluso si el resultado de la ejecución de su instrucción SQL es correcto, es posible que la instrucción SQL no sea correcta.

Es posible que algunos estudiantes no entiendan el pasaje anterior, así que vamos a ignorarlo por ahora. Cierto día en cierto año y cierto mes, puede encontrar una instrucción SQL que se ejecutó correctamente ayer, pero hoy es incorrecta. En ese momento , puede comprender que el resultado de la ejecución de ayer fue correcto, porque sucedió que los datos incorrectos de ayer se encontraron con el SQL incorrecto de ayer y finalmente obtuvieron un resultado correcto. entonces. . . .

Bueno, esta vez te ayudé a construir los datos. Si quieres hacer preguntas de SQL, debes practicarlas tú mismo para practicar tus habilidades reales. Por lo tanto, no daré las respuestas directamente en este artículo. Las preguntas no son difíciles. Espero que puedas resolverlos tú mismo. Para practicar, dedica un poco de tiempo a encontrar la respuesta tú mismo, y también puedes cosechar la alegría de resolver el problema. Si aún tienes dudas, también puedes volver al artículo, la forma de obtener la respuesta está al final del artículo.

CREATE TABLE `test_1` (
  `a` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `test_1` (`a`) VALUES ('abcd1234');
INSERT INTO `test_1` (`a`) VALUES ('1234');
INSERT INTO `test_1` (`a`) VALUES ('1234abcd');
INSERT INTO `test_1` (`a`) VALUES ('abcd');
INSERT INTO `test_1` (`a`) VALUES ('<>?:"');
INSERT INTO `test_1` (`a`) VALUES ('abcd1234aaaa');
INSERT INTO `test_1` (`a`) VALUES ('abcd1234aa234234aa');

CREATE TABLE `test_2` (
  `pro_id` int(11) NOT NULL,
  `sales_volume` int(11) NOT NULL,
  PRIMARY KEY (`pro_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (1, 7);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (2, 8);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (3, 1);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (4, 9);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (5, 10);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (6, 6);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (7, 4);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (8, 5);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (9, 3);
INSERT INTO `test_2` (`pro_id`, `sales_volume`) VALUES (10, 2);

CREATE TABLE `test2_pro` (
  `pro_id` int(11) NOT NULL,
  `pro_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`pro_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (1, 'Mate20');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (2, 'Mate20Pro');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (3, 'Mate30');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (4, 'Mate30Pro');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (5, 'Mate40');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (6, 'Mate40Pro');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (7, 'Mate50');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (8, 'Mate50Pro');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (9, 'P10');
INSERT INTO `test2_pro` (`pro_id`, `pro_name`) VALUES (10, 'P20');


CREATE TABLE `test_3` (
  `a` int(11) NOT NULL,
  `b` int(11) NOT NULL,
  `c` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`a`,`b`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test_3` (`a`, `b`, `c`) VALUES (1, 1, 'Tom');
INSERT INTO `test_3` (`a`, `b`, `c`) VALUES (1, 2, 'Tom');
INSERT INTO `test_3` (`a`, `b`, `c`) VALUES (2, 1, 'Jarry');
INSERT INTO `test_3` (`a`, `b`, `c`) VALUES (2, 2, 'Martin');
INSERT INTO `test_3` (`a`, `b`, `c`) VALUES (2, 3, 'Amy');

CREATE TABLE `test_4` (
  `单号` varchar(255) DEFAULT NULL,
  `门店` varchar(255) DEFAULT NULL,
  `结单日期` datetime DEFAULT NULL,
  `支付方式` varchar(255) DEFAULT NULL,
  `支付金额` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `test_4` (`单号`, `门店`, `结单日期`, `支付方式`, `支付金额`) VALUES ('2020001', '1001', '2022-08-15', '现金', 3);
INSERT INTO `test_4` (`单号`, `门店`, `结单日期`, `支付方式`, `支付金额`) VALUES ('2020002', '1002', '2022-08-14', '支付宝', 4);
INSERT INTO `test_4` (`单号`, `门店`, `结单日期`, `支付方式`, `支付金额`) VALUES ('2020003', '1003', '2022-08-15', '微信', 7);
INSERT INTO `test_4` (`单号`, `门店`, `结单日期`, `支付方式`, `支付金额`) VALUES ('2020004', '1001', '2022-08-14', '银行卡', 6);
INSERT INTO `test_4` (`单号`, `门店`, `结单日期`, `支付方式`, `支付金额`) VALUES ('2020005', '1001', '2022-08-15', '现金', 8);
INSERT INTO `test_4` (`单号`, `门店`, `结单日期`, `支付方式`, `支付金额`) VALUES ('2020006', '1003', '2022-08-14', '微信', 12);
INSERT INTO `test_4` (`单号`, `门店`, `结单日期`, `支付方式`, `支付金额`) VALUES ('2020007', '1004', '2022-08-15', '银行卡', 13);


Hablemos primero de la primera pregunta:

Use una instrucción SQL para consultar registros que no son números puros en un campo (A) en la tabla de negocios (test_1)

Esta pregunta no debería ser difícil a primera vista, pero en circunstancias normales, es imposible usar declaraciones SQL tradicionales, es decir, si desea usar LIKE para verificar, lo siento, no se puede hacer. En este momento, se deben usar expresiones regulares. Vaya a buscar el uso regular.

Veamos la segunda pregunta:

Use una oración de SQL para consultar la tabla de clasificación de ventas de productos (test_2) del tercero al sexto nombre de producto y
datos de ventas: lista de ventas de productos test_2 (número de producto: pro_id, volumen de ventas: sales_volume)
tabla de productos test2_pro (número de producto: pro_id , nombre del producto pro_name)

Esta pregunta no es difícil, y los estudiantes de posgrado que pueden aprender también pueden hacerlo. Hay dos puntos de prueba.
Una es la conexión de la tabla y la otra es el uso del límite, que no se describirá en detalle.

entonces la tercera pregunta

Use una oración de SQL para eliminar los datos duplicados en el campo c de la tabla de acuerdo con la clave principal (tabla: test_3; clave principal: a, b dos campos, el campo c es varchar)

Esta pregunta es un poco difícil. Puede encontrar muchas publicaciones en Internet para eliminar datos duplicados, pero el 99% de ellos son una clave principal. Dos claves principales para esta pregunta son un poco problemáticas, pero las ideas son similares.
Por ejemplo, esta idea:

delete from Student
  where Name in( select Name from Student group by  Name having count(Name) > 1) and 
 ID not in(select  max(ID) from Student group by  Name having count(Name) > 1 )

Use una subconsulta para encontrar la lista de nombres duplicados y luego use el nombre en () para seleccionar los registros que se eliminarán.
Luego use una identificación que no esté en () para mantener la que tiene el valor de identificación más grande entre los datos duplicados y elimine las demás.

Y sabemos que cuando usamos la subconsulta IN, solo puede haber una columna en la subconsulta, pero ¿qué debemos hacer si necesitamos hacer coincidir varias columnas? Esto es como hacer?

De hecho, surgió el problema, la subconsulta solo puede admitir una columna y la idea ya está ahí, es decir, está bien cambiar varias columnas en una columna. ¿Cómo convertirse en una columna?
Hay muchas formas, como usar concat para conectar dos columnas, pero debe prestar atención, si hay dos registros, las columnas a y b son 11, 2 y 1, 12 respectivamente. Si no lo soluciona, afectará el resultado de la ejecución.¿Cómo resolver este problema? Usa tu cerebro.

Cuarta pregunta final:

Use una oración de SQL para resumir los datos de la tabla de negocios (prueba_4) (Figura 1), y resuma el monto del pago para cada tienda y cada método de pago diariamente, y use una oración de SQL para convertirlo al formato de la figura 2.

De hecho, esta pregunta de la entrevista de SQL es bastante clásica, la típica fila a columna, muchos novatos se confunden. Hay dos soluciones comunes a este problema:
una es el método de subconsulta y la otra es el método de caso Ambas declaraciones SQL parecen ser bastante frustrantes.
Hoy presentaré otro método SUM(IF()) en MYSQL.

select 门店,结单日期,sum(if(支付方式='现金',t.支付金额,0)) as 现金
from test_4 t 
group by 门店,结单日期
order by 结单日期,门店

================================================== == ==
En realidad, no hay atajos para aprender SQL, la mejor manera es practicar. Al practicar, primero debe analizar el problema a fondo, y luego desarmar el problema complejo, y luego probarlo y resolverlo paso a paso.Incluso se puede escribir una declaración SQL de 3000 líneas.

Para evitar que todos sean perezosos, subí la respuesta al recurso CSDN, haga clic en el enlace para descargar:

https://download.csdn.net/download/aley/86401105
requiere 1 punto para la descarga, por lo que debe trabajar duro para adquirir conocimientos. Si quieres regañarme, por favor, quéjate en los comentarios. Ja ja.

Los estudiantes que no tienen puntos también pueden ir a la cuenta oficial de VX para buscar [sala de entrevistas de Yao SIR], prestarle atención y responder "Pregunta de entrevista SQL 01", y también puede obtener la respuesta.

Supongo que te gusta

Origin blog.csdn.net/aley/article/details/126349751
Recomendado
Clasificación